前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python网络爬虫(7)爬取静态数据详解

python网络爬虫(7)爬取静态数据详解

作者头像
嘘、小点声
发布2019-07-31 17:25:29
3940
发布2019-07-31 17:25:29
举报
文章被收录于专栏:嘘、小点声嘘、小点声

目的

爬取http://seputu.com/数据并存储csv文件

导入库

lxml用于解析解析网页HTML等源码,提取数据。一些参考:https://cloud.tencent.com/developer/article/1477655

requests请求网页

chardet用于判断网页中的字符编码格式

csv用于存储文本使用。

re用于正则表达式

代码语言:javascript
复制
from lxml import etree
import requests
import chardet
import csv
import re

获取网页

生成网页头带入到request.get中,可以模拟浏览器。其中的网页头,可以在浏览器控制台,network下查找到。

代码语言:javascript
复制
user_agent='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'
headers={'User-Agent':user_agent}
r=requests.get('http://seputu.com/',headers=headers)

判断并转换编码

代码语言:javascript
复制
r.encoding=chardet.detect(r.content)['encoding']

解析网页

代码语言:javascript
复制
html=etree.HTML(r.text)

提取网页信息

浏览器打开对应网站,找到要提取的标签,通过元素审查,完成html文本内容的抽取。

这里抽取的内容为h2_title,href,title内容。title通过正则表达式完成分组,并进行数据提取。

注意的是:python正则表达式部分,不支持部分的零宽断言语法,采用分组方案,避开了可能出现的错误!

如以下代码会出错:

代码语言:javascript
复制
import re
box_title='[2012-5-23 21:14:42] 盗墓笔记 贺岁篇 真相'
pattern=re.compile(r'(?<=\[.*\]\s).*')
result1=re.search(pattern, box_title)

rows存储了二维数据,用于写入csv文件。

代码语言:javascript
复制
div_mulus=html.xpath('.//*[@class="mulu"]')
rows=[]
for div_mulu in div_mulus:
    div_h2=div_mulu.xpath('./div[@class="mulu-title"]/center/h2/text()')
    if len(div_h2)>0:
        h2_title=div_h2[0]
        a_s=div_mulu.xpath('./div[@class="box"]/ul/li/a')
        for a in a_s:
            href=a.xpath('./@href')[0]
            box_title=a.xpath('./@title')[0]
            pattern=re.compile(r'\s*\[(.*)\]\s+(.*)')
            result1=re.search(pattern, box_title)
            rows.append([h2_title,result1.group(2),href,result1.group(1)])
            pass
        pass
    pass

存储数据

建立header一维数据,配合之前rows二维数据,通过w权限,配合writer方法,完成一维、二维的数据写入

通过最后的输出,标记正常完成。

代码语言:javascript
复制
headers=['title','real_title','href','date']
with open('text.csv','w') as f:
    f_csv=csv.writer(f,)
    f_csv.writerow(headers)
    f_csv.writerows(rows)
print('finished')
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
  • 导入库
  • 获取网页
  • 判断并转换编码
  • 解析网页
  • 提取网页信息
  • 存储数据
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档