在python爬虫中使用for循环填入网页id并嵌套函数爬取信息时,无法正确爬取 10C

使用了三个网页ID:38635、38636、38627来测试,输出dic的结果为三个同样的字典(都对应38635),

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
url='https://db.yaozh.com/hmap?grade=%E5%85%A8%E9%83%A8&p={}&pageSize=30&province=%E5%B9%BF%E4%B8%9C%E7%9C%81&type=%E5%85%A8%E9%83%A8'
info_url_model='https://db.yaozh.com{}'


for x in ['/hmap/38625.html', '/hmap/38626.html', '/hmap/38627.html']:  #test
        info_url=info_url_model.format(x)      #填入医院urlID    
        detail = requests.get(info_url, headers=headers)  # 取得内容页面内容
        detail.encodint = 'utf-8'
        soup2 = BeautifulSoup(detail.text, 'html.parser')  
        a = soup2.select('.toFindImg')
        for b in soup2.find_all(lambda tag: tag.name == 'span' and tag.get('class') == ['toFindImg']):
            item_list.append(b.text)
            for i in range(len(item_list)):                           #去掉空格
                item_list[i] = item_list[i].replace(' ', '')          #去掉空格
                item_list[i] = item_list[i].replace('\n', '')       #去掉换行符
            dic = dict(zip(item_name, item_list))  # 生成字典
        print(dic)

5个回答

可以试试java的爬虫框架gecco

你试一下手动填你列表中那些网址的时候是能正确打开网页吗

yzhu1015
yzhu1015 手动填写是ok的,也可以通过for循环输出待爬取的网址列表,但是丢到“for b in...”的那个循环之后就不行了
接近 2 年之前 回复

安全限制,把java沙箱中添加安全地址试试

yzhu1015
yzhu1015 没什么java知识基础。。。我研究研究,不知道是代码问题还是网络问题
接近 2 年之前 回复

你把format之后的url打印出来看看,估计就能发现问题了,我实习也是在做爬虫的,欢迎互帮互助

Super_Sloppy
Super_Sloppy 回复yzhu1015: 可以看我写的那几篇爬虫文章,或许有些灵感
接近 2 年之前 回复
yzhu1015
yzhu1015 info_url=info_url_model.format(x) 的结果,info_url 是可以通过for循环输出网页的,一直到soup2的那行可以正常工作,所以我怀疑是不是在for b in...的网页内容爬取的部分有问题。 另外在测试的时候,输出的字典项和内容不能完全对应,内容是打乱的,出了构造并输出字典以外,不知道还有没有什么其他更好的解决方案
接近 2 年之前 回复
//循环到这里看一下soup2的url是不是你想要的
 soup2 = BeautifulSoup(detail.text, 'html.parser')  

然后
你的for b in ...循环每次的最后都会重写dic的值 不奇怪么?还是写错了?
最后可以直接抓table中的所有tr 循环获取信息就行了....
有点乱 凑合看吧

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐