首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python循环刮取多个URL,但是当我迭代站点页码时,数据不会改变吗?

问使用Python循环刮取多个URL,但是当我迭代站点页码时,数据不会改变吗?
EN

Stack Overflow用户
提问于 2017-03-23 19:56:36
回答 1查看 1.9K关注 0票数 3

我正在利用请求和美丽的汤来处理网页抓取,当我试图循环多页留言板数据时,我得到了一些奇怪的结果,每个循环添加了一个页码。

下面的代码是一个例子,我在留言板上遍历第1页,然后在第2页上循环。为了检查自己,我正在打印我正在点击的URL,然后在该页上找到第一条记录。URL看起来是正确的,但是第一个帖子对两者都是一样的。但是如果我复制和粘贴这两个URL,我肯定会在页面上看到一组不同的内容。

有人能告诉我,这是否与我的代码有问题,或者它是否与给我这些结果的论坛上的数据结构有关?提前感谢!

代码语言:javascript
复制
from bs4 import BeautifulSoup

import requests

n_pages = 2
base_link = 'http://tigerboard.com/boards/list.php?board=4&page='

for i in range (1,n_pages+1):
    link = base_link+str(i)
    html_doc = requests.get(link)
    soup = BeautifulSoup(html_doc.text,"lxml")
    bs_tags = soup.find_all("div",{"class":"msgline"})
    posts=[]
    for post in bs_tags:
        posts.append(post.text)
    print link
    print posts[0]

>     http://tigerboard.com/boards/list.php?board=4&page=1
>     52% of all websites are in English, but  - catbirdseat MU - 3/23/17 14:41:06
>     http://tigerboard.com/boards/list.php?board=4&page=2
>     52% of all websites are in English, but  - catbirdseat MU - 3/23/17 14:41:06
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-23 21:18:35

该网站的实施是虚假的。出于某种原因,它要求设置特定的cookie PHPSESSID,否则它将不返回第一个页面以外的另一个页面,而不管page参数如何。

设置此cookie解决了以下问题:

代码语言:javascript
复制
from bs4 import BeautifulSoup

import requests

n_pages = 2
base_link = 'http://tigerboard.com/boards/list.php?board=4&page='

for i in range (1,n_pages+1):
    link = base_link+str(i)
    html_doc = requests.get(link, headers={'Cookie': 'PHPSESSID=notimportant'})
    soup = BeautifulSoup(html_doc.text,"lxml")
    bs_tags = soup.find_all("div",{"class":"msgline"})
    posts=[]
    for post in bs_tags:
        posts.append(post.text)
    print link
    print posts[0]

另一种解决方案是使用会话,因为第一个请求(第一个页面的请求)将把cookie设置为一个实际值,并在以后的请求中发送。

调试很有趣!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42985834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档