文章插图
可以看到已经爬取成功了
现在就考虑批量爬取了
urls=['https://www.xungushici.com/shici/%d'%p for p in range(1,20001)]#用列表生成表达式批量产生链接
用列表生成表达式批量产生链接,因为不同的页面的链接就最后一个数字不同
因为不是每个链接都是能爬取成功的,所以用try except捕捉异常
import requestsfrom lxml import etreels1=[]k = 0p = 0for count in range(0,20000):try:get = requests.get(urls[count]).text # get(url) 得到我们的网页, text将源网页转化为字符串selector = etree.HTML(get) # 将源码转换为xpath可以识别的TML格式Xpath={'标题':'/html/body/div/div/div[1]/div[1]/div/h3','朝代':'/html/body/div/div/div[1]/div[1]/div/p/a[1]','作者':'/html/body/div/div/div[1]/div[1]/div/p/a[2]','正文':'/html/body/div/div/div[1]/div[1]/div/div[1]',#需要合并'译文':'/html/body/div/div/div[1]/div[2]/div[2]/p[2]',#需要合并'注释':'/html/body/div/div/div[1]/div[2]/div[2]/p[4]','赏析':'/html/body/div/div/div[1]/div[3]/div[2]/p[%d]','创作背景':'/html/body/div/div/div[1]/div[4]/div[2]/p','关于诗人':'/html/body/div/div/div[2]/div[2]/div[2]/p'}Xpath_keys=['标题', '朝代', '作者', '正文','译文', '注释', '赏析', '创作背景','关于诗人']content={}content['pome_id']=count+1#将页面链接最后的数字保存for i in range(9):if i in [3,4,5]:ls=[]ls=selector.xpath('/'+Xpath[Xpath_keys[i]]+'/text()')if i==3:content[Xpath_keys[i]] = '\n'.join(ls)else:content[Xpath_keys[i]] = ''.join(ls)elif i==6:ls=[]for j in range(1,17):path='/html/body/div/div/div[1]/div[3]/div[2]/p[%d]'%jls+=selector.xpath('/'+path+'/text()')content[Xpath_keys[i]] = ''.join(ls)else:content[Xpath_keys[i]] = selector.xpath('/'+Xpath[Xpath_keys[i]]+'/text()')[0]flag = Truefor i in range(9):if len(content[Xpath_keys[i]].split()) == 0:flag = Falseif flag:k += 1ls1.append(content)print("下载的数量:%d诗的编号%d"%(k,content['pome_id']))except:p+= 1print("pass:%d"%p)pass
效果图:(机子慢,这个代码跑了将近一个小时)
文章插图
至此就将所有古诗都进行爬取了,但是只是存进了列表ls1中,并没有下载下来,下一步就是将列表中的数据存入excl中,采用xlwt+pandas
import xlwtimport pandas as pddef export_excel(export):#将字典列表转换为DataFramepf = pd.DataFrame(list(export))#指定字段顺序order = ['pome_id','标题', '朝代', '作者', '正文','译文', '注释', '赏析', '创作背景','关于诗人']pf = pf[order]columns_map = {'pome_id':'pome_id','标题':'标题','朝代':'朝代','作者':'作者','正文':'正文','译文':'译文','注释':'注释','赏析':'赏析','创作背景':'创作背景','关于诗人':'关于诗人'}pf.rename(columns =columns_map ,inplace = True)#指定生成的Excel表格名称file_path = pd.ExcelWriter('name7.xlsx')#替换空单元格pf.fillna(' ',inplace = True)#输出pf.to_excel(file_path,encoding = 'utf-8',index = False)#保存表格file_path.save()if __name__ == '__main__':#将分析完成的列表导出为excel表格export_excel(ls1)
至此数据准备阶段基本完成了(需要最后的数据的可以告诉我一下)
【python+爬虫+mysql+neo4j 基于知识图谱的古诗词推荐(一)】太晚了,之后再写吧,整理一下发现要用到的东西也是挺多的
- 非常实用的工具,你用过几款呢? 爬虫数据采集工具
- python爬虫是什么
- 「2022 年」崔庆才 Python3 爬虫教程 - 基础案例爬取实战
- python爬取代理ip Python爬虫代理
- 海外爬虫ip 代理ip的方法是反爬虫的主要手段
- python源代码大全 python爬虫脚本在哪里找
- 爬虫国内外研究现状 爬虫发展趋势
- 0基础seo介绍,零基础也能使用的SEO爬虫公式?
- 微信视频号:已封禁上千个利用爬虫抓取视频号数据的违规微信个人帐号
- 会python爬虫能找到工作吗