day24-python-spider

day24-python-spider

python

XPath

基准表达式

能够匹配一个列表的表达式就叫做基准表达式

案例:

from lxml import etree
import requests
from fake_useragent import UserAgent

url = "https://movie.douban.com/top250"

# 伪造请求头
ua = UserAgent()
headers = {
    "User-Agent":ua.firefox
}
# 接受请求的响应对象
resp = requests.get(url=url, headers=headers)
print(resp.status_code)

html = resp.text
# 对html进行一个解析,生成一个树结构
parseHtml=etree.HTML(html)
# 基准表达式,能过匹配一个列表
xpathBds='//div[@class="item"]'

itemList=parseHtml.xpath(xpathBds)
xpathMovieName='.//span[@class="title"]/text()'
# print(itemList)
for item in itemList:
    movieNameList=item.xpath(xpathMovieName)
    print(movieNameList)

爬取链家案例

# 爬取链家
import requests
from fake_useragent import UserAgent
from lxml import etree
# 要爬取的url地址 pag{} 代表当前是第几页
url = 'https://bj.lianjia.com/ershoufang/pag{}/'

# 伪造headers
ua = UserAgent()
headers = {
    "User-Agent": ua.firefox
}
# 当前页
pageNum = 1;
url = url.format(pageNum)
# 获取响应
resp = requests.get(url=url, headers=headers)

# 获取页面
html = resp.text
# 对html进行解析
html=etree.HTML(html)
# 构建基准表达式
xpathItemList='//ul[@class="sellListContent"]/li'
# 获取列表
itemList=html.xpath(xpathItemList)
# 遍历列表
# 构建查询的xpth规则
# 图片链接
xpathImgLink='.//img[@class="lj-lazy"]/@src'
# 地点
xpathAdress='.//div[@class="positionInfo"]/a/text()'
# 详细楼层
xpathDetailAddr='.//div[@class="houseInfo"]/text()'
for item in itemList:
    # 图片链接
    imgLink=item.xpath(xpathImgLink)
    # 地址
    address=item.xpath(xpathAdress)
    add=""
    for a in address:
        add+=a
    # 详细楼层
    detailAddr=item.xpath(xpathDetailAddr)[0]
    # print(type(detailAddr))
    # detailAddr=detailAddr.split('|')
    print(detailAddr)

只显示爬到的部分结果,没有对数据进行处理

爬取有道词典

  • 注意:前期需要做大量的分析工作,通过浏览器自带的抓包工具,实现对代码的分析,得到正确的请求参数
# 有道翻译软件

from fake_useragent import UserAgent
import requests
# https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
# 发现上述的地址有个 _o 这是有道词典 做的一个反爬机制 
url = "https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"

ua=UserAgent()
headers={
    "User-Agent":ua.ie
}
word=input("请输入你要查询的单词:")
import time
import random
from hashlib import md5
# 时间戳
lts=str(int(time.time()*1000))
print(lts)
#salt 根据时间戳生成的字符串
salt=lts+str(random.randint(0,9))
# 加密后的字符串
sign="fanyideskweb" + word + salt + "Ygy_4c=r#e#4EX^NUGUc5"
# 进行md5加密
s=md5()
s.update(sign.encode()) # md5加密必须是字节码
# 16进制加密
sign=s.hexdigest()

print(lts,salt,sign)

data = {
    "i": word,
    "from": "AUTO",
    "to": "AUTO",
    "smartresult": "dict",
    "client": "fanyideskweb",
    "salt": salt,
    "sign": sign,
    "lts": lts,
    "bv": "e8502234d005987c9adf93179232356e",
    "doctype": "json",
    "version": "2.1",
    "keyfrom": "fanyi.web",
    "action": "FY_BY_REALTlME"
}

resp = requests.post(url=url, data=data,headers=headers)

dataJson=resp.json()

print(dataJson)

其他

读取u盘的时候,显示磁盘结构损坏,且无法读取

解决方法:

菜单+r  进入上面的界面:输入 chkdsk G/:F 
G 是你的u盘的盘符

hashlib包

  • 进行mad5加密
from hashlib import md5

str="你好,丫丫"
# 创建一个hash对象
m=md5()
print(type(m))
# 把需要加密的字符串添加进去
m.update(str.encode()) # 需要添加字节

# 获取16进制的加密后的字符串
str=m.hexdigest()
print(str)

  • 注意:在update(str) 添加的字符串必须转换成字节类型

posted @ 2022-04-11 22:07  黎白昼  阅读(18)  评论(0)    收藏  举报