昨天写了个爬虫程序,中间遇到了各种可能遇到的问题,现在将问题写下来,希望以后不再2犯同样的错误。
这一个代码块用于读取txt文件,并将其转换成列表,文件中存储的为url。但在实际转换为列表之后再输出,发现多了一个"\n",因此导致输出的url错误,对此,可在实际爬取url时候,将“\n”去掉。
def read_txt():
f = open('url.txt') #打开存储的txt文件
url_list = list(f) #将文件转换成列表
# print(url_list)
return url_list
这段代码用于获取网页的信息,其中存在的问题在于xpath提取的问题,这个页面的标签又两层,导致爬取的时候重复取到了内容,内容重复了两次,合适的解决方法是向上再找几个标签,并且利用标签的id属性,id是唯一的,而class属性并不唯一,解决了重复取值的问题。
def get_page(url_list):
for i in range(len(url_list)):
print("正在爬取第"+str(i)+"条数据") #输出正在读取第几条数据
url = url_list[i].replace('\n','') #获取每一个url,并将尾部的'\n'替换掉
print(url)
save_list = [] #用于存储需要保存的信息
page = requests.get(url, headers=headers) #读取页面
page.encoding = 'utf-8'
page = page.text
tree = etree.HTML(str(page))
result = tree.xpath('//div[@id="full-view-heading"]/div[@class="article-citation"]/div[@class="article-source"]//text()')#xpath语句用于提取相应的内容
在将数据存储到本地文件中也出现了一些问题,我发现实际存储的数量少于url数量,经过分析,原来是url有重复的,我采用的字典来保存key为url,,值为爬取的信息,使得自动去掉了重复值,因此我改成列表存储信息。