lxml爬取实验
1.豆瓣
爬取单个页面数据
import requests
from lxml import etree
#import os url = "https://movie.douban.com/cinema/nowplaying/yongzhou/"
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
req = requests.get(url=url,headers=headers)
text = req.text
dics = []
#将抓取下来的数据根据一定的规则进行提取
html = etree.HTML(text)
ul = html.xpath("//ul[@class='lists']")[0]
#print(etree.tostring(ul,encoding='utf-8').decode('utf-8'))
lis = ul.xpath("./li")
for li in lis:
title = li.xpath("@data-title")[0]
score = li.xpath("@data-actors")[0]
adress = li.xpath("@data-region")[0]
img_hai = li.xpath(".//img/@src")[0]
dic = {
'title':title,
'score':score,
'adress':adress,
'img':img_hai
}
dics.append(dic)
print(dics)
2.电影天堂
爬取多个页面数据
import requests
import json
from lxml import etree
url = "http://www.dytt8.net"
HEADERS = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
'Referer':'http://www.dytt8.net/html/gndy/dyzz/list_23_1.html'
} def get_url(urls):
response = requests.get(urls,headers=HEADERS)
text = response.text #请求页面
html = etree.HTML(text) #解析为HTML文档 html为Element对象 (可以执行xpath语法)
detail_urls = html.xpath("//table[@class='tbspan']//a/@href") #获取页面下的href
detail_urls = map(lambda urls:url+urls,detail_urls) #将detail_urls这个列表中每个url都扔给lambda这个函数合并 再将整个修改后的赋给detail_urls
return detail_urls def parse_detail_url(de_ur):
movie = {}
response = requests.get(de_ur,headers=HEADERS)
text = response.content.decode('gbk')
html = etree.HTML(text)
title = html.xpath("//div[@class='title_all']//font[@color='#07519a']/text()")[0] #获取标题
movie['title'] = title #放入字典
zoomE = html.xpath("//div[@id='Zoom']")[0]
img_hb = zoomE.xpath(".//img/@src")
cover = img_hb[0] #海报
#sst = img_hb[1] #电影截图
movie['cover'] = cover
#movie['sst'] = sst def parse_info(info,rule):
return info.replace(rule,"").strip() #.strip()把前后空格删掉
infos = zoomE.xpath(".//text()")
for index,info in enumerate(infos): #enumerate 索引序列(0 str 1 str 2 str)
if info.startswith("◎片 名"): #判断 以。。开始
info = parse_info(info,"◎片 名") #调用parse_info将"◎片 名"替换为无(没有)
movie['pian'] = info
elif info.startswith("◎年 代"):
info = parse_info(info, "◎年 代")
movie['year'] = info
elif info.startswith("◎产 地"):
info = parse_info(info, "◎产 地")
movie['adress'] = info
elif info.startswith("◎导 演"):
info = parse_info(info, "◎导 演")
movie['actor'] = info
elif info.startswith("◎类 别"):
info = parse_info(info, "◎类 别")
movie['lb'] = info
elif info.startswith("◎豆瓣评分"):
info = parse_info(info, "◎豆瓣评分")
movie['db'] = info
elif info.startswith("◎主 演"):
info = parse_info(info, "◎主 演")
actors = []
for x in range(index+1,len(infos)):
actor = infos[x]
if actor.startswith("◎"): #过滤简介部分
break
actors.append(actor)
movie['actors'] = actors
elif info.startswith("◎简 介"):
info = parse_info(info,"◎简 介")
for x in range(index+1,len(infos)):
profile = infos[x].strip()
if profile.startswith("【"): #过滤下载地址部分
break
movie['profile'] = profile
download_url = html.xpath("//td[@bgcolor='#fdfddf']/a/@href")[0] #下载地址
movie['download_url'] = download_url
return movie def write_to_file(content):
with open('result.txt','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n') #ensure_ascii=False 输出为中文
f.close() def dianying():
urld = "http://www.dytt8.net/html/gndy/dyzz/list_23_{}.html" #这里用到了{} .format()的用法
movies = [] #定义一个列表
for x in range(1,8):
#第一个for循环用来控制7个页面
print(x)
urls = urld.format(x)
if x==5: #这里因为第5个页面出现报错信息 可能是编码问题 解决不了 所以我就过滤了第5页
continue
detail_ur = get_url(urls) #解析每页的详细信息
write_to_file("第%s页" % x)
for detail_url in detail_ur:
#第二个for循环用来遍历每个页
movie = parse_detail_url(detail_url)
movies.append(movie)
write_to_file(movie) if __name__ == '__main__':
dianying()
3.腾讯招聘
跟上一个电影天堂的代码差不多
import requests
import json
from lxml import etree
url = "https://hr.tencent.com/"
HEADERS = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
def get_url(urld):
response = requests.get(urld,headers=HEADERS)
text = response.text
html = etree.HTML(text)
detail_url = html.xpath("//tr[@class='even' or @class='odd']//a/@href")
detail_url = map(lambda x:url+x,detail_url) return detail_url def prease_url(detail_url):
dic = {}
#print(detail_url)
response = requests.get(detail_url,headers=HEADERS)
text =response.text
html = etree.HTML(text)
title = html.xpath("//tr[@class='h']//td[@class='l2 bold size16']//text()")[0]
dic['title'] = title #方法一 (死板)
adress = html.xpath("//tr[@class='c bottomline']//td//text()")[1]
dic['adress'] = adress
# 方法二 (简洁)
str = html.xpath("//tr[@class='c bottomline']//td")
leibie = str[1].xpath(".//text()")[1]
dic['leibie'] = leibie
nums = str[2].xpath(".//text()")[1]
dic['nums'] = nums
gz = html.xpath("//ul[@class='squareli']")
gzzz = gz[0].xpath(".//text()")
gzyq = gz[1].xpath(".//text()")
dic['工作职责'] = gzzz
dic['工作要求'] = gzyq
#print(dic)
return dic def write_to_file(content):
with open('tengxun.txt','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n') #ensure_ascii=False 输出为中文
f.close()
def tengxun():
movies = []
urls = "https://hr.tencent.com/position.php?keywords=python&lid=0&tid=87&start={}#a"
for x in range(0,501,10): #步长为10
print(x)
urld = urls.format(x)
detail_urls = get_url(urld)
for detail_url in detail_urls:
movie = prease_url(detail_url)
movies.append(movie)
write_to_file(x)
write_to_file(movies) if __name__ == '__main__':
tengxun()
lxml爬取实验的更多相关文章
- 爬虫---lxml爬取博客文章
上一篇大概写了下lxml的用法,今天我们通过案例来实践,爬取我的博客博客并保存在本地 爬取博客园博客 爬取思路: 1.首先找到需要爬取的博客园地址 2.解析博客园地址 # coding:utf-8 i ...
- lxml的使用(节点与xpath爬取数据)
lxml安装 lxml是python下功能很丰富的XML和HTML解析库,性能非常的好,是对libxml3和libxlst的封装.在Windows下载这个库直接使用 pip install lxml ...
- 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据
为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...
- 用Python爬取了考研吧1000条帖子,原来他们都在讨论这些!
写在前面 考研在即,想多了解考研er的想法,就是去找学长学姐或者去网上搜索,贴吧就是一个好地方.而借助强大的工具可以快速从网络鱼龙混杂的信息中得到有价值的信息.虽然网上有很多爬取百度贴吧的教程和例子, ...
- Python3爬虫系列:理论+实验+爬取妹子图实战
Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...
- Python爬虫使用lxml模块爬取豆瓣读书排行榜并分析
上次使用了BeautifulSoup库爬取电影排行榜,爬取相对来说有点麻烦,爬取的速度也较慢.本次使用的lxml库,我个人是最喜欢的,爬取的语法很简单,爬取速度也快. 本次爬取的豆瓣书籍排行榜的首页地 ...
- lxml xpath 爬取并正常显示中文内容
在使用python爬虫提取中文网页的内容,为了能正确显示中文的内容,在转为字符串时一定要声明编码为utf-8,否则无法正常显示中文,而是显示原编码的字符,并没有正确转换.比如下面这个简单的爬取百度页面 ...
- Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息
本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...
- Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块
工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...
随机推荐
- 洛谷P1032 字串变换-题解
https://www.luogu.org/problemnew/show/P1032--(题目传送) 好在数据范围很小,暴力一点也能过.思路较简单,按照所有规则,从第一位开始广搜. 注意:1.str ...
- Vue 报错[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders
场景:父组件向子组件传递数据,子组件去试图改变父组件数据的时候. 解决:子组件通过事件向父组件传递信息,让父组件来完成数据的更改. 比如:我的父组件是普通页面,子组件是弹窗的登录界面,父组件传递的数据 ...
- SQL2012数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份
在一次数据库还原的操作过程中遇到如上错误,去百度了下找到了对应的解决方法 第一个: 在还原完整备份时候,在回复状态状态哪里选择 restore with norecovery ,尾日志部分可选可不选, ...
- java 判断语句和循环语句
一.判断语句:if和switch if(关系表达式1) { 语句体1; }else if (关系表达式2) { 语句体2; }…else { 语句体n+; } switch(表达式) { case 值 ...
- python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套
复习 1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用: # 字符串的比较# -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...
- Linux 配置代理
在我们账号的home那有一个.bashrc文件,用来设置一些开机运行的bash命令 cd ~ ls -a vi .bashrc 我们可以在这里添加代理 export http_proxy=" ...
- netcore项目在Centos部署:nohup和supervisor方式
Centos上部署netcore项目 1 准备工作 在Centos上部署netcore应用程序有两种常用方式:nohup和supervisord,这里简单演示一下这两种部署方式. 首先我们写一个简单的 ...
- 提取 linux 文件目录结构
提取 linux 文件的目录结构 find /home/user1/ -type d |while read line ;do mkdir -p /home/user2/$line;done
- 二、初始化superset
上一步成功安装了superset, 1.初始化数据 创建命令 #创建管理员账号fabmanager create-admin --app superset#cd到superset 根目录参考路径 C: ...
- 开发一个项目之代码规范ESLint
ESLint{ "rules": { "semi": ["error", "always"], } }error lev ...