我正在利用请求和美丽的汤来处理网页抓取,当我试图循环多页留言板数据时,我得到了一些奇怪的结果,每个循环添加了一个页码。
下面的代码是一个例子,我在留言板上遍历第1页,然后在第2页上循环。为了检查自己,我正在打印我正在点击的URL,然后在该页上找到第一条记录。URL看起来是正确的,但是第一个帖子对两者都是一样的。但是如果我复制和粘贴这两个URL,我肯定会在页面上看到一组不同的内容。
有人能告诉我,这是否与我的代码有问题,或者它是否与给我这些结果的论坛上的数据结构有关?提前感谢!
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发布于 2017-03-23 21:18:35
该网站的实施是虚假的。出于某种原因,它要求设置特定的cookie PHPSESSID,否则它将不返回第一个页面以外的另一个页面,而不管page参数如何。
设置此cookie解决了以下问题:
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设置为一个实际值,并在以后的请求中发送。
调试很有趣!
https://stackoverflow.com/questions/42985834
复制相似问题