目录
常见错误一
常见错误二
常见错误三
常见错误四
难点:
难点一
难点二
难点三
难点四
难点五
难点六
难点七
难点八
难点九
难点十
难点十一
难点十二
难点十三
难点十四
难点十五
难点十六
常见错误一
就是设置 headers错误 就是 :这个两边是不可以出现空格的
常见错误二
如果发现网页爬取的内容 爬取不到
应该就是 有反扒机制触发 或者是 自己的语法写错了
常见错误三
listerrow 就是列表出错 就可以参考 14微博热搜 里面的 if判断语句 就是解决列表出错的
常见错误四
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 339: invalid continuation byte
这个是遇到了 反扒
一般来说 出现这个错误 content = req.content.decode('utf-8')在这个里面加上参数content = req.content.decode('utf-8','ignore')也就是忽略报错
难点:
难点一
POST 使用 data get 使用 params
kw: 这个就是相当于 网站内部自己 怎么搜所东西 所以建立字典 去模仿 网站搜索的过程\
s = input("请输入你想要翻译的单词:")
dat = {
'kw': s
}
记得去网站中寻找
param = {
'type': '24',
'interval_id': '100:90',
'action': '',
'start': 0,
'limit': 20,
}
这个也是 网站中的东西
要用到字典 2种情况 f12的标头 一直往下拉 英文是 form data 中文是表单数据 有时候 不在标头 有时候在 Payload中去找
难点二
# Python3.7及以上 必须加上http://,不加就会报错 就是字典里面
dlip = {
'http':'http://47.100.9.91:7890'
}
难点三
open函数用法
with open("第一次作业.html",mode='w',encoding='utf-8')as f:
f.write(content)
难点四
join函数
这个 comment = ''.join(comment) 表达的意思是 爬取的网页有 9个p标签 存储到列表中 就有9个列表
但是我想要 合并这些列表 输出成一整个文字 这样方便提取数据 所以使用join函数 ''这个就是表示 合并的时候 ''有什么符号 空的就表示 不要符号
难点五
遇到 utf-8 或 gbk解码问题 实在不知道是什么的时候 用 html = url.text 就是 猜是什么解码 只要返回页面就可以 因为我们需要的是 a标签的值 两种方法都可以用 一个不行 用另外一个
或者 使用一个直接解决的方法 就是 加上一个参数 ignore html = url.content.decode('gbk','ignore')
first_url = 'https://www.dytt8.net'
这个是先设置一个 头 也就是要拼接的 url
getas = []
for a in biggerurls:
url = requests.get(url=a,headers=headers)
html = url.content.decode('gbk')
urls = etree.HTML(html)
geta = urls.xpath('//b/a/@href')
# 因为这里得到的 a标签的 url是不完整的url 也就是/html/gndy/jddy/list_63_{}.html 这样子的
# 那么 就需要 拼接 url的值
# 使用 map函数拼接
getass = list(map(lambda a:first_url+a,geta))
# 这个语法就是 map(lambda 命名:要拼接的url+要拼接的url,返回给geta)
# 这样拿出的 只是一个map内存 还要给函数加一个 list(map(lambda a:first_url+a,geta))
getas.append(getass
难点六
这里获取的时候 注意 在网页寻找的时候 先找到图片对应的链接 然后 用正则表达式 寻找 但是如果一直找不到 语法也没错 那么就进入源码去寻找
通过ctrl+f 打开查找 然后复制 图片的链接去找 找到源码中存储链接的东西 在用正则表达式去写)
获取图片的数据是用bytes流数据 get.content
难点七
divs = soup.find_all('div')[1:]
for div in divs:
# 这里要加一个list 记住 以后获取东西的时候 看到结果是这样一个对象<generator object PageElement.stripped_strings at 0x00000233A90EA730> 就是说明要加List
z = list(div.stripped_strings)
print(z)
难点八
编码方式 打开f12 进入header头部去寻找 编码方式
难点九
当发现 需要使用|隔开的时候 可以使用 join函数
getactors = '|'.join(getactor)
难点十
这里使用正则表达式 去掉等等要命名的 alt中的一些特殊符号
alt = re.sub(r',。?\|\*', '', alts)
因为有的alt是没有 名字的 所以使用 len函数
if len(alt) == 0:
alt = i
i += 1
img_name = str(alt) + suffix
这里str的原因是 数字 没办法 与字符串拼接 所以选择使用 str将 数字强制转换成 字符串 然后和suffix拼接
这个i=0 然后用 len来表示 图片名称的方法只适用于单线程爬虫 多线程爬虫的话 还是会重复的
img_name = str(alt) + suffix.replace('.null', '.jpg')
这个replace 就是有的图片后缀是null 所以将它替换为jpg
难点十一
如果说 怕多线程爬取图片重复 那就拿 部分的url来 当作图片的名字就好了
if len(alt) == 0:
alt = imgurl[-10:-5]
那就拿图片的url 的部分 来命名这个图片
这个[-10:-5] 就是倒数 后面的值的意思
难点十二
切记 切记 切记 这个多线程爬虫 爬取的东西 一定要多 才会运行 不然 根本不会运行 !!!!
所以 如果 range 是(1,4)的话 根本不会运行
for i in range(1, 101):
url = 'https://www.pkdoutu.com/photo/list/?page={}'.format(i)
page_queue.put(url)
难点十三
print(result.status_code) 这个是打印状态码
难点十四
这个num就是将上面数据的 adminID 拿出来 因为这个人使用adminID 来表示的 也就是相当于分析接口
这个 i.get 就是将上面的字典datas中 叫unknown2的数据拿出来
num = i.get('unknown2')
难点十五
poem = re.findall('<div\sclass="contson".*?>(.*?)</div>', content, re.DOTALL)
首先就是 在获取 古诗的时候 直接获取整个div 确实可以获取的到全部 但是里面本身就有<p>标签这种 还有\n这种东西
么就可以通过以下这种方法 进行解决
poemss = []
for poems in poem:
new_poem = re.sub('<.*?>', '', poems)
# 这个的意思就是 将 <里面无论是什么> 也就是说把所有的标签 全部去除 替换成 空白
new_poems = new_poem.strip()
# 这个的意思就是 去除空格 也就是 \n
poemss.append(new_poems)
难点十六
因为拿出来的 job_requests 是要合成 整体的 就用strip() 来进行消除空格 然后 使用join进行拼接
这个办法是一个常见的整合办法
for i in job_requests:
a = i.strip('/')
job_request.append(a)
job_request = ''.join(job_request)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)