Python:有条件地跳过抓取过程中的url
Python: Skip url in scraping process conditionally
我正在抓取 属性 BS4 的广告,使用以下代码,
# get_ad_page_urls collects all ad urls displayed on page
def get_ad_page_urls(link):
BS4_main(link) # BS4_main parses the link and returns the "container" object
return [link.get("href") for link in container.findAll("a", href=re.compile("^(/inmueble/)((?!:).)*$"))]
# get_ad_data obtains data from each ad
def get_ad_data(ad_page_url):
ad_data={}
response=requests.get(root_url+ad_page_url)
soup = bs4.BeautifulSoup(response.content, 'lxml')
<collecting data code here>
return ad_data
这很好用。通过下面的多处理代码,我抓取了所有的广告,
def show_ad_data(options):
pool=Pool(options)
for link in page_link_list:
ad_page_urls = get_ad_page_urls(link)
results=pool.map(get_ad_data, ad_page_urls)
现在问题:
应跳过特定广告。这些广告显示特定的文本,可以通过该文本识别它们。我刚开始使用 def
函数,我不知道如何告诉代码跳到下一个 ad_page_url
。
我认为"skipping"代码应该放在soup = bs4.BeautifulSoup(response.content, 'lxml')
和<collecting data code here>
之间。像,
# "skipping" semi-code
for text in soup:
if 'specific text' in text:
continue
但我不确定使用 def
函数是否允许应用 continue
在迭代上。
我应该如何修改代码,使其在页面上显示 specific
文本时跳过广告?
是的,如果在 if 语句中满足跳过条件,则继续或通过将跳过下一次迭代:
def get_ad_data(ad_page_url):
ad_data={}
response=requests.get(root_url+ad_page_url)
soup = bs4.BeautifulSoup(response.content, 'lxml')
for text in soup:
if 'specific text' in text:
continue #or pass
else:
<collecting data code here>
return ad_data
我正在抓取 属性 BS4 的广告,使用以下代码,
# get_ad_page_urls collects all ad urls displayed on page
def get_ad_page_urls(link):
BS4_main(link) # BS4_main parses the link and returns the "container" object
return [link.get("href") for link in container.findAll("a", href=re.compile("^(/inmueble/)((?!:).)*$"))]
# get_ad_data obtains data from each ad
def get_ad_data(ad_page_url):
ad_data={}
response=requests.get(root_url+ad_page_url)
soup = bs4.BeautifulSoup(response.content, 'lxml')
<collecting data code here>
return ad_data
这很好用。通过下面的多处理代码,我抓取了所有的广告,
def show_ad_data(options):
pool=Pool(options)
for link in page_link_list:
ad_page_urls = get_ad_page_urls(link)
results=pool.map(get_ad_data, ad_page_urls)
现在问题:
应跳过特定广告。这些广告显示特定的文本,可以通过该文本识别它们。我刚开始使用 def
函数,我不知道如何告诉代码跳到下一个 ad_page_url
。
我认为"skipping"代码应该放在soup = bs4.BeautifulSoup(response.content, 'lxml')
和<collecting data code here>
之间。像,
# "skipping" semi-code
for text in soup:
if 'specific text' in text:
continue
但我不确定使用 def
函数是否允许应用 continue
在迭代上。
我应该如何修改代码,使其在页面上显示 specific
文本时跳过广告?
是的,如果在 if 语句中满足跳过条件,则继续或通过将跳过下一次迭代:
def get_ad_data(ad_page_url):
ad_data={}
response=requests.get(root_url+ad_page_url)
soup = bs4.BeautifulSoup(response.content, 'lxml')
for text in soup:
if 'specific text' in text:
continue #or pass
else:
<collecting data code here>
return ad_data