python爬虫系列第一次笔记之基本库的使用

python爬虫系列第一次笔记之基本库的使用

1.urllib的使用

1.1 使用urlib发送请求

1.1.1.urlopen()

urlib.request模块提供了最基本的构造HTTP请求的方法,利用它可以模拟浏览器的一个请求发起过程。同时还带有处理授权验证,重定向,浏览器Cookie以及其他内容
import urlib.request

response = urlib.request.urlopen('https://www.python.org')
print(response.read().decode('utf-8'))

那么这里会输出Python官网的爬取,输出网页的源代码。如果我们在上述代码后面加上

print(type(response))

会输出:

<class 'http.client.HTTPResponse'>

使用该函数输出的是一个HTTPRequest类型的对象,主要包含read(),readinto(),getheader()等方法,以及msg,version,status,reason等属性

如果想要给链接传递一些参数那么携带格式为:

urlib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None
,cadefault=False,context=None)

data参数:
要使用data参数,需要使用bytes()方法将参数转化为字节流编码格式,即bytes类型,如果传递了这个参数,那么它的请求方式就不再是GET方法,是POST方式

import urlib.parse
import urlib.request

data = bytes(urlib.parse.urlencode({'word': 'hello'}), encoding='utf8')
reponse = urlib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())

这里我们传递了一个参数word,值是hello.它需要被转码成bytes(字节流)类型。其中转字节流使用了bytes方法,该方法第一个参数需要是str(字符串)类型,需要使用urlib.parse模块里的urlopen()方法来将参数字典转化为字符串;第二个参数指定编码格式
我们请求的站点是httpbin.org,它可以提供HTTP请求测试,那么输出的结果中,我们传入的data参数会出现在form字段中。这表明是模拟了表单提交的方式,以POST方法传输数据

timeout参数:
timeout参数用于设置超时时间,单位为秒,意思是如果请求超出了设置的时间,还没有响应的话,就会抛出异常,当然还可以使用try except语句来实现,如果长时间没响应就跳过抓取,抛出异常,而不会中断操作

1.1.2.Request

使用urlopen()方法可以实现最基本的请求,但这几个简单参数并不足以构建一个完整的请求。如果请求中需要加入Headers信息,就需要使用Requst类

import urlib.request

request = urlib.request.Request('https://python.org')
response = urlib.request.urlopen(request)
print(response.read().decode('utf-8'))

这里依旧是使用urlopen()方法来发送这个请求,但是参数不再是一个url,而是一个Request类型的对象。通过这种方法,我们可以更加灵活的配置参数。
构建方法如下:

urlib.request.Request(url,data=None, headers={},origin_req_host=None, unverifiable=False, method=None)

第一个参数是url,是必传参数,其他都是可选参数
第二个参数data如果要传,必须传bytes类型的,方法可参考上面的方法
第三个参数headers是一个字典,他就是请求头,最常用的方法就是通过修改 User-Agent 来伪装浏览器,默认的是 Pyhton-urlib,我们可以通过修改它来伪装浏览器。
第四个参数origin_req_host指的是请求方的host名称或者IP地址
第五个参数unverifiable表示这个请求是否是无法验证的
第六个参数method是一个字符串,用来指示请求的方法,比如 GET,POST和PUT等

我们来传入试试

from urlib import request,parse

url = 'http://httpbin.org/post'
headers = {
	'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
	'Host':'httpbin.org'
}
dict = {
	'name':'Germey'
}
data = bytes(parse.urlencode(dict),encoding='utf8')
req = request.Request(url=url, data=data, headers=headers,method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8')

另外,headers也可以使用add_header()方法来添加:

req = request.Request(url=url, data=data, method='POST')
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36')

1.1.3.高级用法

构造请求已经可以随意完成了,那么对于一些更高级的操作(比如Cookies处理,代理设置等),我们要怎么办呢?我们需要引入Handler

验证方法:

from urlib.request import HTTPPasswordMgrWithDefaultRealm,HTTPBasicAuthHandler,build_opener
from urlib.error import URLError

username = 'uername'
password = 'password'
url = 'http://localhost:5000/'

p = HTTPPasswordMgrWithDefaultRealm()
p.add_password(None,url,username,password)
auth_handler = HTTPBasicAuthHandler(p)
opener = build_opener(auth_handler)

try:
    result = opener.open(url)
    html = result.read().decode('utf-8')
    print(html)
except URLError as e:
    print(e.reason)

这里首先实例化HTTPBasicAuthHandler对象,其参数是HTTPPasswordMgrWithDefaultRealm对象,使用add_password添加进去用户名和密码,这样就建立了一个处理验证的Handler.再用build_opener方法构建一个Opener,再用open()方法打开链接

代理方法:
使用爬虫,免不了使用代理,添加代理,可以这样做

from urllib.error import URLError
from urllib.request import ProxyHandler,build_opener

proxy_handler = ProxyHandler({
    'http': 'http://127.0.0.1:9734',
    'https': 'https://127.0.0.1:9733'
})
opener = build_opener(proxy_handler)
try:
    response = opener.open('https://www.baidu.com')
    print(response.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

Cookies处理:
首先我们需要将网站的Cookies获取下来
代码如下:

import http.cookiejar,urllib.request

cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('https://www.baidu.com')
for item in cookie:
    print(item.name+"="+item.value) 

结果如下:

BAIDUID=AA7F1D8AE33B902C068E6D145477835A:FG=1
BIDUPSID=AA7F1D8AE33B902C8EDE0A9C553D73E7
PSTM=1609329941
BD_NOT_HTTPS=1

如果想输出为文件格式,代码如下:

import http.cookiejar,urllib.request

filename = 'cookies.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('https://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)

运行后会生成一个cookies.txt文件,内容为:

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.

.baidu.com	TRUE	/	FALSE	1640866441	BAIDUID	8931522A2935AE5F8CA5107AB0157055:FG=1
.baidu.com	TRUE	/	FALSE	3756814088	BIDUPSID	8931522A2935AE5FD4FE83670225746B
.baidu.com	TRUE	/	FALSE	3756814088	PSTM	1609330441
www.baidu.com	FALSE	/	FALSE	1609330741	BD_NOT_HTTPS	1

生成了文件后,如何读取并利用呢?
代码如下:

import http.cookiejar,urllib.request

cookie = http.cookiejar.MozillaCookieJar()
cookie.load('cookies.txt', ignore_discard=True,ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('https://www.baidu.com')
print(response.read().decode('utf-8'))

这里使用load方法读取本地文件,然后构建handler和opener即可完成操作,输出网页源代码

1.2 处理异常

1.2.1URLError

这个类来自urlib库的error模块,继承自OSError类,具有一个属性reason,即返回错误的原因。
如果请求一个不存在的页面就会返回错误。

1.2.2.HTTPError

是urlerror的子类,专门处理http请求错误,比如认证请求失败等。具有三个属性:
code:返回http状态码,比如404表示网页不存在,500表示服务器内部错误
reason:返回错误的原因
headers:返回请求头

一般在一个完整的爬虫体系中,我们通常需要精准的捕获异常,来做出更确切的异常判断。
一般使用的就是try except方法

1.3 解析链接

1.3.1urlparse()

实现URL的识别的分段,代码如下:

from urllib.parse import urlparse
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
print(type(result),result)

输出为:

<class 'urllib.parse.ParseResult'> ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

观察一下url: http://www.baidu.com/index.html;user?id=5#comment
urlparse方法将它分为了6个部分,://前面的就是scheme,代表协议;第一个/符号前面便是netloc,即域名,后面是path,即访问路径;分号;后面是params,代表参数;后面?后面是查询条件query,一般用作GET类型的URL;井号#后面是锚点,用于直接定位页面内部的下拉位置。
所以可以得到一个标准的链接格式,如下:

scheme://netloc/path;params?query#fragment

一个标准的url都会符合这个规则,urlparse方法总共有3个参数。
urlstring:必填项,就是待解析的url
scheme:他是默认的协议,就是加入这个链接没有携带协议信息,会将这个作为默认的协议(https/http)
allow_fragments:是否忽略fragment部分,如果设置为False,fragment部分会被忽略,会被解析为path,parameters或者query的一部分,而fragment部分为空

而且返回的结果ParseResult实际上是一个元组,我们可以用索引顺序来获取,例子:result[0]

1.3.2.urlunparse()

urlparse是将url拆解,那么urlunparse()是给予部分来实现url的构造
用一个实例来看看:

from urllib.parse import urlunparse
data = ['http','www.baidu.com','index.html','user','a=6','comment']
print(urlunparse(data))

运行结果为:

http://www.baidu.com/index.html;user?a=6#comment

1.3.3.urlsplit()

这个方法和urparse()方法相似

from urllib.parse import urlsplit

result = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')
print(result)

运行结果为:

SplitResult(scheme='http', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment')

结果也是元组类型,可以用属性获取,也可以用索引获取

1.3.4.urlunsplit()

from urllib.parse import urlunsplit

data = ['http','www.baidu.com','index.html','a=6','comment']
print(urlunsplit(data))

运行结果为:


http://www.baidu.com/index.html?a=6#comment

1.3.5.urlencode()

这个方法非常实用,主要用来构造GET请求参数
代码如下:

from urllib.parse import urlencode

params = {
    'name':'germey',
    'age':22
}
base_url = 'http://www.baidu.com?'
url = base_url+urlencode(params)
print(url)

运行结果为:

http://www.baidu.com?name=germey&age=22

还有许多方法,就不再一一赘述

2.使用requests

requests相比urlib更加便捷,更加简单,而且requests的底层实现就是用的urlib,所以更重点学习requests.

2.1 基本用法

2.1.1GET请求

import requests
r = requests.get('http://httpbin.org/get')
print(r.text)

结果如下:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.24.0", 
    "X-Amzn-Trace-Id": "Root=1-5fedacf9-642ca71b2509dc0e23ea38b0"
  }, 
  "origin": "117.150.208.93", 
  "url": "http://httpbin.org/get"
}

而如果要构造请求链接,相比urlib的方法,requests更加简单

import requests

data = {
    'name':'germey',
    'age':22
}
r = requests.get('http://httpbin.org/get',params=data)
print(r.text)

结果为:

{
  "args": {
    "age": "22", 
    "name": "germey"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.24.0", 
    "X-Amzn-Trace-Id": "Root=1-5fedad7c-21e09169150018470f4fc74e"
  }, 
  "origin": "117.150.208.93", 
  "url": "http://httpbin.org/get?name=germey&age=22"
}

网页返回的类型是str类型但是确实JSON格式的,所以想直接解析结果得到一个字典的话,可以调用json()方法:

import requests

r = requests.get('http://httpbin.org/get')
print(type(r.text))
print(r.json())
print(type(r.json()))

结果为:

<class 'str'>
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.24.0', 'X-Amzn-Trace-Id': 'Root=1-5fedae12-293c4e364a0ce5d136419671'}, 'origin': '117.150.208.93', 'url': 'http://httpbin.org/get'}
<class 'dict'>

json()方法可以将json格式的字符串转化为字典

如果我们需要抓取一个网页,那么我们需要添加更多的参数

import requests

headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}
r = requests.get('https://www.zhihu.com/explore',headers=headers)
print(r.text)

我们这里添加了headers信息,即浏览器标识信息。

抓取二进制数据(如图片)

import requests

r= requests.get('https://github.com/favicon.ico')
print(r.text)
print(r.content)

这样获取返回的会是乱码:

:�������O                                L������                                      ������                                        ������!                                ������4                                @���8���          
��������333                                                ���t�������+R������t                                                                `������R����������                                                                    �������������\                                                                        G������������                                                                          ������������                                                                                ������������                                                                                ���������������                                                                            ������������%                                                                           ������������v                                                                        a������G������                                                                ������G+++������]                                                                I������+++    ������3                                                                ������         �����5            +*���                ���&            !�����             �����f    @@@b����������l+++    R�����                $$$��������������������������$$$                     ������������������������                             .����������������������.                                     ��������������������                                             $$$������������������$$$                                                         ��������������                                                                         +++G��������G+++                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
b'\x00\x00\x01\x00\x02\x00\x10\x10\x00\x00\x01\x00 \x00(\x05\x00\x00&\x00\x00\x00  \x00\x00\x01\x00 \x00(\x14\x00\x00N\x05\x00\x00(\x00\x00\x00\x10\x00\x00\x00 \x00\x00\x00\x01\x00 \x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...'

那么我们采取什么方式来获取呢?

import requests

r= requests.get('https://github.com/favicon.ico')
with open('favicon.ico','wb') as f:
    f.write(r.content)

使用 with open的方法,第一个参数是文件名,第二个参数是代表以二进制写的形式打开
这样就会在同级目录下出现一个文件,打开就是一个图片

2.1.2 POST请求

也很简单:

import requests

data = {'name':'germey','age':22}
r= requests.post('http://httpbin.org/post',data=data)
print(r.text)

运行结果如下:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "age": "22", 
    "name": "germey"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "18", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.24.0", 
    "X-Amzn-Trace-Id": "Root=1-5fedb265-128a28f52e746a9062e4e6ac"
  }, 
  "json": null, 
  "origin": "117.150.208.93", 
  "url": "http://httpbin.org/post"
}

2.1.3 响应

发送请求后,获取的是响应,我们可以使用text,content获取,还有很多属性和方法是可以来获取其他信息的比如状态码,响应头,Cookies等等

import requests

# 查看响应内容,response.text 返回的是str类型
print(response.text)

# 查看响应内容,response.content返回的字节流数据
print(respones.content)

# 查看响应的url地址
print(response.url)

# 查看响应头部字符编码
print(response.encoding)

# 查看响应状态码
print(response.status_code)

状态码判断可参考:

https://blog.csdn.net/qq_37555524/article/details/100364405?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160941341616780274042322%252522%25252C%252522scm%252522%25253A%25252220140713.130102334…%252522%25257D&request_id=160941341616780274042322&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-100364405.first_rank_v2_pc_rank_v29&utm_term=%E7%BD%91%E9%A1%B5%E7%8A%B6%E6%80%81%E7%A0%81

2.2高级用法

2.2.1文件的上传

加入有的网站需要上传文件,我们可以用files来实现

import requests

files = {'file':open('favicon.ico','rb')}
r= requests.post('http://httpbin.org/post',files=files)
print(r.text)

返回结果为:

{
  "args": {}, 
  "data": "", 
  "files": {
    "file": "data:application/octet-stream;base64,AAABAAIAEBAAAAEAIAAoBQAAJgAAA...="
  }, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "6665", 
    "Content-Type": "multipart/form-data; boundary=e6d54847bac41a76f9c95495964b72c7", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.24.0", 
    "X-Amzn-Trace-Id": "Root=1-5fedb3f3-6cfd8d11660970af0c9bff02"
  }, 
  "json": null, 
  "origin": "117.150.208.93", 
  "url": "http://httpbin.org/post"
}

2.2.2Cookies

import requests

r= requests.get('https://www.baidu.com')
print(r.cookies)
for key,value in r.cookies.items():
    print(key + '=' + value)

结果为:

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
BDORZ=27315

首先调用cookies属性获取Cookies,然后他是一个RequestsCookieJar类型。然后用items方法转化为元组组成的列表。遍历每个cookie实现遍历解析
当然我们也可以直接在界面复制cookie来维持登陆状态,比如
在这里插入图片描述

import requests

headers = {
    'Cookie': '_zap=d517e5be-3ce4-4885-b0b2-fa3c78fec390; d_c0="AFCWZnmbRxKPTjEb8AmKToWijlCvbhvo9aE=|1606823131"; _xsrf=2d620a42-4ea0-46fa-97df-9cd3b8959c7b; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1607217795,1607254047,1607427553,1609412423; SESSIONID=b9wEktq43Q4QnYcvJzCdjUrcJcLMVYVISEKswEfFwok; JOID=UFoXB0_go47MPylXE-ZlksNCtBYBgpr_iVJdJiHV8rqbUXY0ZagKZZU5KVEV4vKGdnRAtshFgAbeSU8s7Y9FNas=; osd=UloQB0nio4nMOStXFOZjkMNFtBADgp3_j1BdISHT8LqcUXA2Za8KY5c5LlET4PKBdnJCts9FhgTeTk8q749CNa0=; capsion_ticket="2|1:0|10:1609413981|14:capsion_ticket|44:YjY3YjUxYzAyZDYxNGE0ZDliYWIxZjdmOTNkZjliMDk=|7bf031b23c07d41d7300db4b24331a11bfddc0ac59313c47b8aaca5230439181"; z_c0="2|1:0|10:1609414006|4:z_c0|92:Mi4xbnFzTklRQUFBQUFBVUpabWVadEhFaVlBQUFCZ0FsVk5kZ1BiWUFCWFVRNGVielBNR1g2TGRycFM1dHYxamVsZXVB|8207a2b80acad856267acb964018bf2080a2c08a0673fd0eb0b5b4369bcf4eaa"; unlock_ticket="ABAfn1IDNBImAAAAYAJVTX687V_qgi-HfoeKiXhq7YvrvCBjFW8UJg=="; tst=r; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1609414013; KLBRSID=ca494ee5d16b14b649673c122ff27291|1609414014|1609412422',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}
r= requests.get('https://www.baidu.com',headers=headers)
print(r.text)

直接将你登陆之后的cookie复制下来,直接加入headers参数中,就可以正常登陆知乎

2.2.3会话维持

添加cookie信息可以完成登录操作,那么怎样维持这个登陆状态呢?

import requests

session = requests.Session()
r = session.get('http://httpbin.org/cookies')
print(r.text)

session实例在请求一个网站之后,对方服务器设置在本地的cookie会保存在session中,下一次在使用session请求对方服务器的时候,会带上前一次的cookie。这里使用session获取 requests.Session()方法,这样可以让后面的书写方便一些。

案例:(登陆人人网)

import requests

# 1. 创建session对象,可以保存Cookie值
ssion = requests.session()

# 2. 处理 headers
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

# 3. 需要登录的用户名和密码
data = {"email":"youremail", "password":"yourpassword"}

# 4. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
ssion.post("http://www.renren.com/PLogin.do", data = data)

# 5. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = ssion.get("http://www.renren.com/410043129/profile")

# 6. 打印响应内容
print(response.text)

2.2.4ssl证书验证

一般我们是禁止证书验证,设定verify参数即可

response = requests.get(url,verify=False)

2.2.5代理的设置

这是爬虫必定会用到的部分,方法为:

import requests

proxies = {
    'http':'http://127.0.0.1:1111'
    'https':'https://127.0.0.1:1112'
}
requests.get(url,proxies=proxies)

2.2.6超时设置

用于规定经过多长时间还未获取响应的话,就返回错误

import requests

requests.get(url,timeout=1)

时间可以自己设置,或者不加参数

2.2.7身份认证

有的网页一进去就需要身份验证,一般就是登陆认证

import requests

r = requests.get('http://localhost:5000',auth=('username','password'))
print(r.status_code)

auth后面携带你的用户名和密码

3.requests_html库

3.1请求参数

# 1.导包
from requests_html import HTMLSession
# 2.实例化(注意,要加上括号)
session = HTMLSession()
# 3.准备start_url
url = 'https://www.baidu.com'
# 4.发送请求(get)
response_get = session.get(url)
# post请求
response_post = session.post(url, data=data)
# request(请求选择化)
response = session.request(method='get'/'post', url=url)

3.2response的属性

在这里插入图片描述
获取源码的方法

# 1.导包
from requests_html import HTMLSession
# 2.实例化(注意,要加上括号)
session = HTMLSession()
# 3.准备start_url
url = 'https://www.baidu.com'
# 4.发送请求(get)
response_get = session.get(url)
# 5.获取html源码
html_str = response_get.html.html
print(html_str)

3.3response的对象属性

在这里插入图片描述

3.4response与Xpath语法

# 1.导包
from requests_html import HTMLSession
# 2.实例化(注意,要加上括号)
session = HTMLSession()
# 3.准备start_url
url = 'https://www.baidu.com'
# 4.发送请求(get)
response_get = session.get(url)
# 5.获取html源码
html_str = response_get.html.html
print(html_str)
# 6.使用xpath语法
data = response_get.html.xpath('xpath语法')
print(data)

4.案例操作(爬取猫眼电影排行)

import requests
from lxml import etree
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
    'Cookie': '__mta=141860109.1609416427681.1609416512667.1609418131742.6; uuid_n_v=v1; uuid=F2EBEFF0428E11EBB1AF0F1DB9BFAA15CB5575A235BA430F8B3B568DD758C655; _lxsdk_cuid=1767ee55dc1c8-0723dd96fa7f05-594a2011-1fa400-1767ee55dc1c8; _lxsdk=F2EBEFF0428E11EBB1AF0F1DB9BFAA15CB5575A235BA430F8B3B568DD758C655; _csrf=1dee000e14ef35969dc14838269822aa885606a54f5efe06c32dd954decc8b8b; Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1608446730,1609416427; Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1609418132; _lxsdk_s=176b8b1c836-b48-ce1-ee2%7C%7C12'}
r = requests.get('https://maoyan.com/board/4',headers=headers)
text = r.text
# print(text)
html = etree.HTML(text)
# print(html)
ret_list = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div/p/a/@title')
print(ret_list)

这里仅爬取第一页,也只有电影名字,所以没有用类方法,etree.HTML()方法是将字符串转化为element对象,让xpath可以解析

5.总结

初衷是用于日后知识点忘记了来记忆的,若对您起到帮助也是极好

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值