安装包:
  requests,lxml
request包用于进行数据抓取,
lxml用来进行数据解析
对于对网页内容的处理,由于html本身并非如数据库一样为结构化的查询所见即所得,所以需要对网页的内容进行分析然后进行内容提取,lxml就是用来完成此项工作
在requests中最用的方法为get()方法,通常情况下可以将url做为参数传入进去,对于一些功能比较完善的网站如果存在反爬取数据的功能是则需要设置headers参数内容,内容为一字典类型
可以在浏览器中查看User-Agent字段的内容,设置后requests将在抓取数据时同时提交所设置的头信息以进行浏览器的访问模拟
同时在抓取数据时要注意网站所使用的字符编码,当编码不一至时需要对字符编码进行相应的转换
具体见以下代码注释
#!/usr/bin/python
# encoding: utf-8
import requests
from lxml import etree url='http://www.chinanews.com/scroll-news/mil/2017/0110/news.shtml' def getNewUrlList():
global url
header ={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'}    构造浏览器头信息
response=requests.get(url,headers=header)   获取数据
html=response.content.decode("gbk")    解码
selector=etree.HTML(html)
contents = selector.xpath('//div[@id="content_right"]/div[@class="content_list"]/ul/li[div]')    使用xpath语法解析获取数据//表示从根开始查找@后跟相应的html属性
for eachlink in contents:
url = eachlink.xpath('div/a/@href')[0] if str(eachlink.xpath('div/a/@href')[0]).__contains__("http") else "http://www.chinanews.com"+eachlink.xpath('div/a/@href')[0]
title = eachlink.xpath('div/a/text()')[0]
ptime = eachlink.xpath('div[@class="dd_time"]/text()')[0]
yield (title,url,ptime) def getNewContent(urlList):
for title,url,ptime in urlList:
response=requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'})
html=response.content.decode("gbk")
selector=etree.HTML(html)
title=selector.xpath("//div[@id='cont_1_1_2']/h1/text()")[0]
source=selector.xpath("//div[@id='cont_1_1_2']/div[@class='left-time']/div[@class='left-t']/text()")[0]
content=selector.xpath("//div[@id='cont_1_1_2']/div[@class='left_zw']/p/text()") i=0
resultContent=''
for item in range(0,content.__len__()):
resultContent+=content[i]
i+=1
yield (title,source,resultContent) if __name__=="__main__":
urlList= getNewUrlList()
result= getNewContent(urlList)
for title,source,content in result:
print u"标题:%s"%title
print u"来源:%s"%source
print u"正文:%s"%content

最新文章

  1. 【字符编码】Java编码格式探秘
  2. genymotion启动虚拟机遇到问题解决方法步骤
  3. Vue入门笔记#过渡
  4. FreeBSD暂时用9.X系列为宜
  5. gcc常用命令介绍
  6. scala知识点(二)
  7. [JavaScript] js获取Html元素的实际宽度高度
  8. python字符集选择
  9. eclipse注解快捷键
  10. C#使用LitJson解析JSON(转)
  11. [codeforces 901E] Cyclic Cipher 循环卷积-Bluestein's Algorithm
  12. 设计模式系列之装饰模式(Decorator Pattern)
  13. django之forms组件
  14. BM算法
  15. linux 命令之top
  16. wpf 控件大小随窗体大小改变而改变
  17. iOS 对 HTTPS 证书链的验证
  18. Spring Colud 学习
  19. Collections中的各种方法
  20. redis 工具

热门文章

  1. spring boot日志及Log4j日志配置
  2. jmete察看结果树和body data乱码问题的解决办法
  3. LNMP之Php的安装配置
  4. Servlet的概念与用法
  5. swoole安装报错详解 mysqlnd_find_charset_nr in Unknow
  6. input 和 select
  7. CentOS7.4关闭防火墙
  8. 安装jdk环境
  9. 解压与压缩(把dataset转为string、、 )
  10. JAVASCRIPT 使用 && 和 || 完成 简写