requests和lxml实现爬虫的方法
作者:jingxian 发布时间:2022-05-11 11:05:58
标签:requests,爬虫,lxml
如下所示:
# requests模块来请求页面
# lxml模块的html构建selector选择器(格式化响应response)
# from lxml import html
# import requests
# response = requests.get(url).content
# selector = html.formatstring(response)
# hrefs = selector.xpath('/html/body//div[@class='feed-item _j_feed_item']/a/@href')
# 以url = 'https://www.mafengwo.cn/gonglve/ziyouxing/2033.html'为例子
# python 2.7
import requests
from lxml import html
import os
# 获取首页中子页的url链接
def get_page_urls(url):
response = requests.get(url).content
# 通过lxml的html来构建选择器
selector = html.fromstring(response)
urls = []
for i in selector.xpath("/html/body//div[@class='feed-item _j_feed_item']/a/@href"):
urls.append(i)
return urls
# get title from a child's html(div[@class='title'])
def get_page_a_title(url):
'''url is ziyouxing's a@href'''
response = requests.get(url).content
selector = html.fromstring(response)
# get xpath by chrome's tool --> /html/body//div[@class='title']/text()
a_title = selector.xpath("/html/body//div[@class='title']/text()")
return a_title
# 获取页面选择器(通过lxml的html构建)
def get_selector(url):
response = requests.get(url).content
selector = html.fromstring(response)
return selector
# 通过chrome的开发者工具分析html页面结构后发现,我们需要获取的文本内容主要显示在div[@class='l-topic']和div[@class='p-section']中
# 获取所需的文本内容
def get_page_content(selector):
# /html/body/div[2]/div[2]/div[1]/div[@class='l-topic']/p/text()
page_title = selector.xpath("//div[@class='l-topic']/p/text()")
# /html/body/div[2]/div[2]/div[1]/div[2]/div[15]/div[@class='p-section']/text()
page_content = selector.xpath("//div[@class='p-section']/text()")
return page_title,page_content
# 获取页面中的图片url地址
def get_image_urls(selector):
imagesrcs = selector.xpath("//img[@class='_j_lazyload']/@src")
return imagesrcs
# 获取图片的标题
def get_image_title(selector, num)
# num 是从2开始的
url = "/html/body/div[2]/div[2]/div[1]/div[2]/div["+num+"]/span[@class='img-an']/text()"
if selector.xpath(url) is not None:
image_title = selector.xpath(url)
else:
image_title = "map"+str(num) # 没有就起一个
return image_title
# 下载图片
def downloadimages(selector,number):
'''number是用来计数的'''
urls = get_image_urls()
num = 2
amount = len(urls)
for url in urls:
image_title = get_image_title(selector, num)
filename = "/home/WorkSpace/tour/words/result"+number+"/+"image_title+".jpg"
if not os.path.exists(filename):
os.makedirs(filename)
print('downloading %s image %s' %(number, image_title))
with open(filename, 'wb') as f:
f.write(requests.get(url).content)
num += 1
print "已经下载了%s张图" %num
# 入口,启动并把获取的数据存入文件中
if __name__ =='__main__':
url = 'https://www.mafengwo.cn/gonglve/ziyouxing/2033.html'
urls = get_page_urls(url)
# turn to get response from html
number = 1
for i in urls:
selector = get_selector(i)
# download images
downloadimages(selector,number)
# get text and write into a file
page_title, page_content = get_page_content(selector)
result = page_title+'\n'+page_content+'\n\n'
path = "/home/WorkSpace/tour/words/result"+num+"/"
if not os.path.exists(filename):
os.makedirs(filename)
filename = path + "num"+".txt"
with open(filename,'wb') as f:
f.write(result)
print result
到此就结束了该爬虫,爬取页面前一定要认真分析html结构,有些页面是由js生成,该页面比较简单,没涉及到js的处理,日后的随笔中会有相关分享
0
投稿
猜你喜欢
- Pelican 介绍首先看看 Pelican 的一些主要特性: Python实现,开放源码 &
- CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理技
- 可匹配单行,也支持换行匹配[\s\S]*?加上括号,效果更好([\s\S]*?)来源:https://blog.csdn.net/ASUKA
- 获取CPU信息我们先来获取CPU的信息:>>> import psutil>>> psutil.cpu_
- python matplotlib画图使用colorbar工具自定义颜色 colorbar(draw colorbar without an
- 1、一些准备工作 安装djangopip install django创建django项目进入项目代码存放目录执行命令:djang
- 利用可视化探索图表1.数据可视化与探索图数据可视化是指用图形或表格的方式来呈现数据。图表能够清楚地呈现数据性质, 以及数据间或属性间的关系,
- python序列类型包括哪三种python序列类型包括:列表、元组、字典列表:有序可变序列创建:userlist = [1,2,3,4,5,
- 大家好,我是不学前端的前端程序员,事情是这个样子的,前几天不是双十一预购秒杀嘛由于我女朋友比较笨,手速比较慢,就一直抢不到,她没抢到特价商品
- 背景在python工程完成开发以后需要编译成可执行文件,如此一来生产环境和开发环境隔离开来便于用户使用(可独立使用,无需配置python开发
- 何为共线性:共线性问题指的是输入的自变量之间存在较高的线性相关度。共线性问题会导致回归模型的稳定性和准确性大大降低,另外,过多无关的维度计算
- 在这种配置下我们要实现关键词不区分大小写搜索并高亮显示要借助ASP的正则处理了,请看下面代码:<% Function&nbs
- 动态展示这是一个动态图哦导读兄弟们可以收藏一下哦!情人节可以送出去,肥学找了几朵python写的花给封装好送给大家。不是多炫酷但是有足够的用
- 本文实例为大家分享了Python实现双人五子棋对局的具体代码,供大家参考,具体内容如下效果:自己需要两个棋子:服务器玩家全部代码:# 案列使
- 如果你从来没有使用过Python,我强烈建议你阅读Python introduction,因为你需要知道基本的语法和类型。包管理Python
- import reimport urllib2import cookielibdef renren():
- 简述GoogleNet 和 VGG 等网络证明了,更深度的网络可以抽象出表达能力更强的特征,进而获得更强的分类能力。在深度网络中,随之网络深
- 今天一个同事报告一个问题,表都不能使用了,检查了一下,发现问题 db2 => select * from testACTNO ACTK
- Python是一门非常适合处理数据和自动化完成重复性工作的编程语言,我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Pyth
- 目前,在使用python处理一个nc文件绘制一个风场图时,出现了以下报错虽然图片画出来了,但是很丑而且没有理想的填充颜色!但是不知道为啥,但