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爬取实验的更多相关文章

  1. 爬虫---lxml爬取博客文章

    上一篇大概写了下lxml的用法,今天我们通过案例来实践,爬取我的博客博客并保存在本地 爬取博客园博客 爬取思路: 1.首先找到需要爬取的博客园地址 2.解析博客园地址 # coding:utf-8 i ...

  2. lxml的使用(节点与xpath爬取数据)

    lxml安装 lxml是python下功能很丰富的XML和HTML解析库,性能非常的好,是对libxml3和libxlst的封装.在Windows下载这个库直接使用 pip install lxml ...

  3. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  4. 用Python爬取了考研吧1000条帖子,原来他们都在讨论这些!

    写在前面 考研在即,想多了解考研er的想法,就是去找学长学姐或者去网上搜索,贴吧就是一个好地方.而借助强大的工具可以快速从网络鱼龙混杂的信息中得到有价值的信息.虽然网上有很多爬取百度贴吧的教程和例子, ...

  5. Python3爬虫系列:理论+实验+爬取妹子图实战

    Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...

  6. Python爬虫使用lxml模块爬取豆瓣读书排行榜并分析

    上次使用了BeautifulSoup库爬取电影排行榜,爬取相对来说有点麻烦,爬取的速度也较慢.本次使用的lxml库,我个人是最喜欢的,爬取的语法很简单,爬取速度也快. 本次爬取的豆瓣书籍排行榜的首页地 ...

  7. lxml xpath 爬取并正常显示中文内容

    在使用python爬虫提取中文网页的内容,为了能正确显示中文的内容,在转为字符串时一定要声明编码为utf-8,否则无法正常显示中文,而是显示原编码的字符,并没有正确转换.比如下面这个简单的爬取百度页面 ...

  8. Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

    本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

  9. Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...

随机推荐

  1. mkdir(): Permission denied

    记录下,凡是遇到此类问题都是无权限导致. 根据不同场景,需要在不同的文件夹设置不同的权限. 例如,图片相关, 在php中,首先看下 配置php.ini的文件上传是否开启(file_uploads = ...

  2. airflow1.10时区修改

    https://blog.csdn.net/crazy__hope/article/details/83688986

  3. 神奇的 UNICODE 字符 : U+202E

  4. JS通用模块模式 UMD

    历史 JS诞生之初面向简单页面开发, 没有模块的概念. 后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块: 之前也有雅虎的实践,使用命名空间 作为模块名. 最后衍生出 面向各种使用场 ...

  5. flask+mod_wsgi+apache在windows上的布署

    已经安装过python3.5 1.安装flask: pip install flask 2.安装apache: Apache是开源软件,针对windows环境,它不直接提供编译版本.可以在http:/ ...

  6. Oracle 11g 服务启动/关闭 及 DB dump 导入

    本地启动Oracle 服务脚本 由于本地机子安装了Oracle后,会自动启动一些默认的Oracle服务,这样子会导致机子比较慢.所以需要改成手动启动/关闭服务. 即用即开,不用就关. 开启的脚本: O ...

  7. net core appsetting配置

    public class BaseController : Controller { protected WLEntity _db; protected ILogger _log; protected ...

  8. 3、if和while语句

    a=1 b=2 if a<b: print("Yes") print("Yes") print("Yes") print(" ...

  9. vo类,model类,dto类的作用及划分

    1.entity里的每一个字段,与数据库相对应, 2.dto里的每一个字段,是和你前台页面相对应, 3.VO,这是用来转换从entity到dto,或者从dto到entity的中间的东西.   举个例子 ...

  10. EOCS框架概述和剖析

    什么是EOCS? EOCS(Enterprise Operation Cross System),是一个基于eosio底层框架实现的企业级跨链操作系统,旨在实现和EOS主链通信的并行链,是真正意义的跨 ...