【发布时间】:2020-03-27 07:57:40
【问题描述】:
我正在尝试从 webmd 留言板抓取一些数据。最初,我构建了一个循环来获取每个类别的页码并将其存储在数据框中。当我尝试运行循环时,我确实为每个子类别获得了适当数量的帖子,但仅限于第一页。有什么想法可能出了什么问题?
lists2=[]
df1= pd.DataFrame (columns=['page'],data=page_links)
for j in range(len(df1)):
pages = (df1.page.iloc[j])
print(pages)
req1 = urllib.request.Request(pages, headers=headers)
resp1 = urllib.request.urlopen(req1)
soup1 = bs.BeautifulSoup(resp1,'lxml')
for body_links in soup1.find_all('div',class_="thread-detail"):
body= body_links.a.get('href')
lists2.append(body)
我在打印功能中获得了正确的页面,但它似乎只在第一页进行迭代并获取帖子的链接。此外,当我复制并粘贴除第一个页面之外的任何页面的链接时,它似乎会暂时加载第一页,然后转到正确的编号页面。我尝试添加 time.sleep(1) 但不起作用。我尝试的另一件事是添加{headers='Cookie': 'PHPSESSID=notimportant'}
【问题讨论】:
-
您需要创建某种能够识别分页链接的递归函数 - I've only ever done this with pyquery
-
使用
requests,您可以使用Session,当您第一次执行GET请求时,它将从服务器获取PHPSESSID(和其他cookie),并将其添加到所有其他@987654329 @/POST自动请求。 -
你为什么不使用
for url in page_links:。为此,您不需要DataFrame。如果你需要DataFrame那么for url in df1['page']: -
@furas 我将如何实现这个?
-
对我来说,你的问题不在
DataFrame,而是在find_all- 似乎只有一页在HTML中有<div class_="thread-detail">,所以它无法从其他页面获取元素。
标签: python web-scraping beautifulsoup