结合个人需求,从某个网站获取一些数据,发现网页链接是隐藏的,需要通过浏览器看后面的代码来获取真实的链接。
下面这个案例,直接是从真实的链接中爬去数据。
此外,发现用pandas的read_html不能直接解析“lxml”的表格,有待后续研究。
另外,爬去的数据发现有很多空格符号,主要是 "\r"、"\n"、"\t",
字符串的去除 "\r"、"\n"、"\t" 的方法也一并添加在这个案例中。
具体代码如下:
# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON" from bs4 import BeautifulSoup
import requests
import csv url2 = 'http://ets.cnemission.com/carbon/portalIndex/markethistory?Top=1' req = requests.get(url2)
# soup = BeautifulSoup(req.content, 'html5lib')
soup = BeautifulSoup(req.content, 'lxml')
# 用“lxml”解析,可以获得数据,但csv文件中每行有空行 table = soup.table
trs = table.find_all('tr') list1 = []
for tr in trs:
td = tr.find_all('td') # 去除每个单元格数据后面的"\r"和"\n"和"\t",
# 下面两种方法都可以生成csv文件,
# 但method1生成的csv文件较小,应该是优化性能较好,暂时不明白其中原理
# method1
row = [i.text.replace('\r', '').replace('\n', '').replace('\t', '') for i in td]
# method 2
# row = [i.text.replace('\r\n\t', '') for i in td] list1.append(row) with open('MktDataGuangdong.csv', 'a', errors='ignore', newline='') as f:
f_csv = csv.writer(f)
f_csv.writerows(list1)