【发布时间】:2018-08-25 02:49:22
【问题描述】:
我只是好奇,因为我正在尝试学习 python。我正在从网站中提取数据。无论如何,我所做的是滚动页面,然后获取与 URL 对应的标题,并在循环中请求此 URL 并使用 BS 提取它。显然,它不起作用,我请求的 HTML 打印如下:
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>
这是python代码
import time
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as soup
chromedriver = "/Users/eduardfossas/Downloads/chromedriver"
driver = webdriver.Chrome(chromedriver)
my_url = driver.get("https://wodwell.com/wods/?sort=newest&category=none&feeds=736")
time.sleep(1)
elem = driver.find_element_by_tag_name("body")
no_of_pagedowns = 20
while no_of_pagedowns:
elem.send_keys(Keys.PAGE_DOWN)
time.sleep(0)
no_of_pagedowns-=1
containers = driver.find_elements_by_class_name('wod-title')
for container in containers:
my_sub_url = "https://wodwell.com/wod/"
my_sub_url = my_sub_url + container.text + '/'
page_html = requests.get(my_sub_url).text
page_soup = soup(page_html, "html.parser")
main_text = page_soup.select('.workout-list')
有什么方法可以让 BeatifulSoup 和 requests 工作?如果没有,我想我会尝试 Scrapy。
你有什么推荐的?
诚挚的问候,非常感谢。
【问题讨论】:
-
您的请求似乎因 403 错误而失败。它在我的系统上运行良好。
-
@ggorlen 你在用什么操作系统?我在高山脉的 macOS 上。您是否尝试打印 var main_text?谢谢!
-
它与操作系统无关,因为它与请求协议有关。有时这也取决于您的地理位置。 @user1888427 你来自哪里?
-
@ggorlen,成功了!我必须为 chrome headers = {'user-agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'} page_html = requests. get(my_sub_url, headers = headers).text
标签: python selenium python-requests