Web scraping/crawling 用于在带分页的博客中获取特定 URL 详细信息

Web scraping/crawling for specific URL details within a blog with pagination

我需要实现一个脚本,从博客页面中删除 URL 并识别 URL 是否包含 link 中的某些关键字,然后在CSV 文件,博客 post URL 已识别关键字 link。

由于博客页面有分页和超过 35 pages/300 个博客 post,我不确定我该怎么做。我正在寻找的 URL 在每个单独的博客 post.

到目前为止,我已经设法按照一些教程学习如何从分页后的主页获取每个博客 post URL。

几乎相同,定义您的空列表以存储 specialUrls 的结果并迭代您的初始 url 结果列表:

data = []
for url in result:
    r=requests.get(url).text
    soup=BeautifulSoup(r,"lxml") 
    data.append('specialUrl')

为避免重复/不必要的请求遍历 set():

data = []
for url in set(result):
    r=requests.get(url).text
    soup=BeautifulSoup(r,"lxml") 
    data.append('FINDSPECIALURL')

以防万一,您也可以使用 break 离开 while 循环。

例子

注意 这只会从第一个博客页面抓取到您的结果的链接 - 从最后删除中断以抓取所有博客页面

from bs4 import BeautifulSoup
import pandas as pd

page=1
result=[]

while True:
    r=requests.get(f"https://www.snapfish.co.uk/blog/page/{page}/").text
    soup=BeautifulSoup(r,"lxml") 
    product=soup.find_all("article",{'class':'post_list'})
    for data in product:
        result.append(data.find('a').get('href'))
    if soup.find("a",class_='next page-numbers') is None:
        break
    page+=1
    break#remove break to scrape all the blog pages

data = []

for url in result:
    r=requests.get(url).text
    soup=BeautifulSoup(r,"lxml")
    for a in soup.select('a[href*="design-detail"]'):
        data.append({
            'urlFrom':url,
            'urlTo':a['href']
        })
        
pd.DataFrame(data).drop_duplicates().to_csv('result.csv', index=False)

输出

urlFrom urlTo
https://www.snapfish.co.uk/blog/what-loving-message-sentiment-to-write-in-your-anniversary-card/ https://www.snapfish.co.uk/design-detail?category=StoreCat_29641&dgId=35d18daa85f844b78c9a7ed0550ca0cf&designId=2b2dbb6233084675828e48e238e2eb9b&sku=CommerceProduct_355343&ptype=cards&pcat=greeting_cards_1989_snapfish_uk&scat=anniversary_cards_10905_snapfish_uk&filters=subCategories~anniversary_cards_10905_snapfish_uk&searchPhrase=&designName=Anniversary%20Gold%20Heart&withSku=N&qty=1&dgCatId=anniversary_cards_10905_snapfish_uk&pcatName=Greeting%20Cards&eoption=CommerceOption_281506#/dgview
https://www.snapfish.co.uk/blog/what-loving-message-sentiment-to-write-in-your-anniversary-card/ https://www.snapfish.co.uk/design-detail?category=StoreCat_29641&dgId=008cec6cdece48c6bf25f13c425f9e4a&designId=acb3720df6a1480ea99dd2f18eec7807&sku=CommerceProduct_355343&ptype=cards&pcat=greeting_cards_1989_snapfish_uk&scat=anniversary_cards_10905_snapfish_uk&filters=subCategories~anniversary_cards_10905_snapfish_uk&searchPhrase=&designName=Heart%20Wreath%20Anniversary&withSku=N&qty=1&dgCatId=anniversary_cards_10905_snapfish_uk&pcatName=Greeting%20Cards&eoption=CommerceOption_281506#/dgview
https://www.snapfish.co.uk/blog/what-loving-message-sentiment-to-write-in-your-anniversary-card/ https://www.snapfish.co.uk/design-detail?category=StoreCat_29641&dgId=b2132bd5de1849479182735dba8857d3&designId=60d4a98f824e48d6badfe4fb443b591f&sku=CommerceProduct_355343&ptype=cards&pcat=greeting_cards_1989_snapfish_uk&scat=anniversary_cards_10905_snapfish_uk&filters=subCategories~anniversary_cards_10905_snapfish_uk&searchPhrase=&designName=XOXO%20Bold&withSku=N&qty=1&dgCatId=anniversary_cards_10905_snapfish_uk&pcatName=Greeting%20Cards&eoption=CommerceOption_281506#/dgview
https://www.snapfish.co.uk/blog/what-loving-message-sentiment-to-write-in-your-anniversary-card/ https://www.snapfish.co.uk/design-detail?category=StoreCat_29641&dgId=8261f8e29d8e4178b526ba80012d05f3&designId=c4ac847f6aef4c87a8588ab83d7a7065&sku=CommerceProduct_355343&ptype=cards&pcat=greeting_cards_1989_snapfish_uk&scat=anniversary_cards_10905_snapfish_uk&filters=subCategories~anniversary_cards_10905_snapfish_uk&searchPhrase=&designName=I%20Found%20You&withSku=N&qty=1&dgCatId=anniversary_cards_10905_snapfish_uk&pcatName=Greeting%20Cards&eoption=CommerceOption_281506#/dgview
https://www.snapfish.co.uk/blog/what-to-write-in-a-custom-snapfish-18th-birthday-card/ https://www.snapfish.co.uk/design-detail?category=StoreCat_29641&dgId=2c8420a9f582492c9801dd8a2fb89ba3&designId=765f31622df648fb908b28d73fbf8b40&sku=CommerceProduct_355343&ptype=cards&pcat=birthday_cards_1989_snapfish_uk&scat=for_her_10993_1561482027_snapfish_uk&filters=subCategories~for_friends_10993_1561482050_snapfish_uk%7Cfor_her_10993_1561482027_snapfish_uk&searchPhrase=&designName=Make%20A%20Wish&withSku=N&qty=1&dgCatId=for_friends_10993_1561482050_snapfish_uk&pcatName=Birthday%20Cards&eoption=CommerceOption_281506#/dgview