python每次运行到这里就报错,没思路……
本帖最后由 double07 于 2021-5-7 09:40 编辑import random
import re
import time
import chardet
import requests
from fake_useragent import UserAgent
from lxml import etree
p = 0
curPage = 1
link_list = []
ua = UserAgent()
header = {
'authority': 'sf.taobao.com',
'cache-control': 'max-age=0',
'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'navigate',
'sec-fetch-user': '?1',
'sec-fetch-dest': 'document',
'referer': 'https://sf.taobao.com/item_list.htm?&category=50025969&province=%D6%D8%C7%EC&sorder=1&page=1',
'accept-language': 'zh-CN,zh;q=0.9',
'cookie': '',
}
params = (
('category', '50025969'),
('province', '%D6%D8%C7%EC'),
('sorder', '1'),
('page', '1'),
)
# 获取网页内容
def gethtml(url):
response = requests.get(url, headers=header, params=params)
encodingInfo = chardet.detect(response.content)
r_response = response.content.decode(encodingInfo['encoding'])
return r_response
def gethtml_detail(url):
response = requests.get(url, headers=header, params=params)
encodingInfo = chardet.detect(response.content)
r_response = response.content.decode(encodingInfo['encoding'])
return r_response
def parse_url(html):
ult = re.findall(r'(sf-item[\S]+)\?', html)# 详情链接
for i in range(len(ult)):
detai_url = "https://" + ult.replace('"', "")# 房屋详情
link_list.append(detai_url)
return link_list
def parse_url_detail(r):
html = etree.HTML(r)
try:
final_link = "https:" + html.xpath('//*[@id="J_NoticeDetail"]/@data-from').strip()
except Exception as e:
print(str(e), "代码异常,链接返回空值")
final_link = ' '
return final_link
# 翻页
def next_page():
url_np = 'https://sf.taobao.com/item_list.htm?&category=50025969&province=%D6%D8%C7%EC&sorder=1&page={}'
url_list =
return url_list
# 主程序
def run_AL():
page = next_page()
for i in page:
html = gethtml(i)
l_list = parse_url(html)
# print(len(l_list))
for u in l_list:
html_detail = gethtml_detail(u)
parse = parse_url_detail(html_detail)
print(parse)
if __name__ == '__main__':
run_AL()
每次运行到这里就报错,苦恼,大佬有时间运行代码,帮忙看看:
没有正常返回。
调试时,//将用户正常页面写入到 x5referer ,以备后续跳转返回 你在parse_url_detail里面输出一下html的内容看看呗 刚开始调试的还可以显示,
再运行时估计楼上也在运行然后//将用户正常页面写入到
估计是被检测了,还有就是速度太快,被检测到也是正常,
这种必须加延时请求5-10秒
还有最好分段请求 不要重复请求
所有的列表页请求后写成文件,下次不再请求,而是读取文件导入,
最后请求详细页
你的代码写的有些重复 gethtm一个就够了,我看代码都是一样名字不一样
另外有个东西不知道会不会有影响,就是header里面的referer,这个是从哪里引用的意思,
如果服务器检查严格点发现来自引用位置不对,就会判定盗链,这会触发拒绝访问的
一般做字典的update 更新一下请求页面来着何处,
fanvalen 发表于 2021-5-6 19:49
刚开始调试的还可以显示,
再运行时估计楼上也在运行然后//将用户正常页面写入到
估计是被检测了,还有就 ...
另外我不确定是请求的网页被警告还是什么原因导致没有匹配到公告地址,
我的做法是把所有的详细页都写成单个文件或者一个文件,再来清洗出地址,
所以请求页回来最好做一个判断是否正常页面,比如警告页面大小和正常不一样,又或者某些字在不在里面,,在的话判定为正常,不在就要考虑是错误页面,必要时必须停止。否则封号就不好玩了
fanvalen 发表于 2021-5-6 19:49
刚开始调试的还可以显示,
再运行时估计楼上也在运行然后//将用户正常页面写入到
估计是被检测了,还有就 ...
学习学习:handshake
出现这种情况,换个ip,又能开始了,但还是到15条就断了,这种情况有必要用代{过}{滤}理池? double07 发表于 2021-5-6 20:04
学习学习
出现这种情况,换个ip,又能开始了,但还是到15条就断了,这种情况有必要用代{过} ...
光换ip不能解决问题,主要是找到检测机制,我看了检测后返回的web页面是,是说退出登录,和登录后继续打开的页面,也就是说重新生成ck可以再登录
<script>
//将用户正常页面写入到 x5referer ,以备后续跳转返回
localStorage.x5referer = "https://sf.taobao.com/item_list.htm?&category=50025969&province=%D6%D8%C7%EC&sorder=1&page=1&category=50025969&province=%25D6%25D8%25C7%25EC&sorder=1&page=1";
location.href="https://login.taobao.com/member/login.jhtml?redirectURL="+encodeURIComponent("https://sf.taobao.com:443//item_list.htm/_____tmd_____/punish?x5secdata=5e0c8e1365474455070961b803bd560607b52cabf5960afff39b64ce58073f78849a367443dd53565277002f507099b27b385fff7bc17a03cafdfd3769a9e81855b38bd923f8e97fc47c28363b278d8b65b0309398014db5684e8a0ec481572e461ee819ca12264cfd380e1ff9a318178839e447c1ca28d219623dae264e7e3c1f342e6f2c4996b587f669dbab68dcd2ab7695fa94590174dcf16e66463ff3e4da92297ed56a297b527fabd4fb0db2aa5fd102e32437f7b8741ec5aa54e4ecf042adeb9e9e60bd20ec8b0196dcfea1b2f9b86c27692bf843654469bc1ede3d7d31456b32ac99bd8d798d7e75290032c81a626a42548bb6ebdecd804bf573367db546d5a02a05c67cd3736b8b85f1bc2f325c1ed71d8363d6a82d206f2b6e9ac8874359d89eb3048a2f5487e9af5b14a6779425216103151458d986536e9c2e21262bc194ca0504960bb2bcab9457150272e2426182b21c9cda16ddea79835236bf51b9837e42f98f4788d8c18a6dcae66bf750f0f38514b819d574fff4e9d8597391b8025c3bb32e549c8e12132b4e6b602db37b3e34a2ddbd16b97b7a9b1a78e6f1c94e53a73ce3bdc99b65b07dfb8059bd83c90f8d25145b780a7eea8a81dd40625c8bd1c64ee3c99c0dc47f9e294a1149ae8e03fac1bb2fd9b03377b20417e706cce39572ff911191a7c02ed414e8f3a339cfd8acc95a48d16687d8e57d47b3683c0406e41204937c8c4100007402&x5step=100")
</script> 问一下,是不是可以检测到这种问题重新注入登录信息{:1_904:}
页:
[1]