timeout我正在尝试了解如何在发送请求时在会话中使用。timeout我在下面尝试的方法可以获取网页的内容,但我不确定这是正确的方法,因为我在本文档中找不到 的用法。
import requests
link = "/sf/ask/tagged/web-scraping/"
with requests.Session() as s:
r = s.get(link,timeout=5)
print(r.text)
Run Code Online (Sandbox Code Playgroud)
如何在会话中使用超时?
我创建了一个脚本来使用请求登录到linkedin。剧本做得很好。
登录后,我使用这个 url从那里https://www.linkedin.com/groups/137920/抓取了这个名字Marketing Intelligence Professionals,你可以在这张图片中看到。
该脚本可以完美地解析名称。但是,我现在想要做的是抓取连接到位于此图像中See all显示的页面底部的按钮的链接。
群组链接 you gotta log in to access the content
到目前为止,我已经创建了(它可以抓取第一张图片中显示的名称):
import json
import requests
from bs4 import BeautifulSoup
link = 'https://www.linkedin.com/login?fromSignIn=true&trk=guest_homepage-basic_nav-header-signin'
post_url = 'https://www.linkedin.com/checkpoint/lg/login-submit'
target_url = 'https://www.linkedin.com/groups/137920/'
with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'
r = s.get(link)
soup = BeautifulSoup(r.text,"lxml")
payload = {i['name']:i.get('value','') for i in soup.select('input[name]')}
payload['session_key'] = 'your email' #put your username …Run Code Online (Sandbox Code Playgroud) python beautifulsoup web-scraping python-3.x python-requests
我正在尝试使用请求和 re 模块从某些站点的登录页面捕获电子邮件地址。这是[\w\.-]+@[\w\.-]+我在脚本中用来捕获它们的模式。
当我运行脚本时,我确实得到了电子邮件地址。但是,我也得到了一些类似于电子邮件地址的不需要的东西,但实际上它们不是,因此我想摆脱它们。
import re
import requests
links = (
'http://www.acupuncturetx.com',
'http://www.hcmed.org',
'http://www.drmindyboxer.com',
'http://wendyrobinweir.com',
)
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
for link in links:
r = requests.get(link,headers=headers)
emails = re.findall(r"[\w\.-]+@[\w\.-]+",r.text)
print(emails)
Run Code Online (Sandbox Code Playgroud)
电流输出:
['react@16.5.2', 'react-dom@16.5.2', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com']
['hh-logo@2x.png', 'hh-logo@2x.png', 'hh-logo@2x.png', 'hh-logo@2x-300x47.png']
['leaflet@1.7.1']
['8b4e078a51d04e0e9efdf470027f0ec1@sentry.wixpress.com', 'requirejs-bolt@2.3.6', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wixstores-client-cart-icon@1.797.0', 'wixstores-client-gallery@1.1634.0']
Run Code Online (Sandbox Code Playgroud)
预期输出:
['bai@acupuncturetx.com', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com']
[]
[]
['wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com']
Run Code Online (Sandbox Code Playgroud)
如何使用正则表达式仅捕获电子邮件地址并删除不需要的内容?
我正在尝试创建一个脚本,使用它我可以解析网站中的几个字段而不会被阻止。我希望从中获取数据的站点需要凭据才能访问其内容。如果不是为了登录,我本可以使用代理轮换绕过速率限制。
当我从基于登录的站点抓取内容时,我试图找出任何方法来避免在从那里抓取数据时被该站点禁止。To be specific, my script currently can fetch content from that site flawlessly but my ip address gets banned along the way if I keep on scraping.
到目前为止,我已经写过(将以下站点地址视为占位符):
import requests
from bs4 import BeautifulSoup
url = "https://stackoverflow.com/users/login?ssrc=head&returnurl=https%3a%2f%2fstackoverflow.com%2f"
with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
req = s.get(url)
payload = {
"fkey": BeautifulSoup(req.text,"lxml").select_one("[name='fkey']")["value"],
"email": "some email",
"password": "some password",
}
res = s.post(url,data=payload)
soup = BeautifulSoup(res.text,"lxml")
for …Run Code Online (Sandbox Code Playgroud) python beautifulsoup web-scraping python-3.x python-requests
我正在尝试使用模块从这个网页中获取不同容器的标题和链接requests,但我找不到任何方法来做到这一点。我试图找到任何通常出现在开发工具中的隐藏 API,但我失败了。我注意到在不同的时候,动态生成的内容大部分时间都在某些脚本标签中可用。但是,在这种情况下,我也找不到其中的内容。作为最后的手段,我使用 Selenium 来获取它们。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
link = 'https://www.firmy.cz/kraj-praha?q=prodej+kol'
def get_content(url):
driver.get(url)
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,'.companyDetail'))):
item_link = item.find_element_by_css_selector("h3 > a.companyTitle").get_attribute("href")
item_title = item.find_element_by_css_selector("span.title").text
yield item_link,item_title
if __name__ == '__main__':
with webdriver.Chrome() as driver:
wait = WebDriverWait(driver,10)
for item in get_content(link):
print(item)
Run Code Online (Sandbox Code Playgroud)
脚本产生的结果如下:
('https://www.firmy.cz/detail/12824790-bike-gallery-s-r-o-praha-vokovice.html', 'Bike Gallery s.r.o.')
('https://www.firmy.cz/detail/13162651-bikeprodejna-cz-praha-dolni-chabry.html', 'BIKEPRODEJNA.CZ')
('https://www.firmy.cz/detail/406369-bikestore-cz-praha-podoli.html', 'Bikestore.cz')
('https://www.firmy.cz/detail/12764331-shopbike-cz-praha-ujezd-nad-lesy.html', 'Shopbike.cz')
Run Code Online (Sandbox Code Playgroud)
如何使用请求模块获取相同的结果?
我正在尝试从网页中的表格中获取一些动态值。此图像表示我希望从该页面获取的值。应该有任何方法可以使用请求来获取它们。为了让您知道,我在开发工具中查找了任何隐藏的 api,还通过页面源代码中的脚本标签查找了值,但我找不到。
这是网站网址
这是我所追求的预期输出。
这是我到目前为止写的:
import requests
from bs4 import BeautifulSoup
url = "https://www.dailyfx.com/sentiment"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
r = requests.get(url,headers=headers)
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".dfx-technicalSentimentCard__barContainer"):
data = [item.get("data-value") for item in items.select("[data-type='long-value-info'],[data-type='short-value-info']")]
print(data)
Run Code Online (Sandbox Code Playgroud)
上面的脚本产生如下的空输出:
['--', '--']
['--', '--']
['--', '--']
['--', '--']
['--', '--']
['--', '--']
['--', '--']
Run Code Online (Sandbox Code Playgroud)
如何使用请求从该表中获取值?
Oxford, Oxfordshire我正在尝试使用请求模块从此网页中抓取此搜索的不同列表。这是我点击搜索按钮之前输入框的样子。
我已经定义了一个准确的选择器来定位列表,但脚本无法获取任何数据。
import requests
from pprint import pprint
from bs4 import BeautifulSoup
link = 'https://www.zoopla.co.uk/search/'
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9,bn;q=0.8',
'Referer': 'https://www.zoopla.co.uk/for-sale/',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
}
params = {
'view_type': 'list',
'section': 'for-sale',
'q': 'Oxford, Oxfordshire',
'geo_autocomplete_identifier': 'oxford',
'search_source': 'home'
}
res = requests.get(link,params=params,headers=headers)
soup = BeautifulSoup(res.text,"html5lib")
for item in soup.select("[id^='listing'] a[href^='/for-sale/details/']:has(h2[data-testid='listing-title'])"):
print(item.get("href"))
Run Code Online (Sandbox Code Playgroud)
编辑:
如果我尝试类似以下的操作,脚本似乎可以完美运行。唯一的主要问题是我必须在标头中使用硬编码的 cookie,这些 cookie …