所以我一直在通過Al Sweigart的在線Automate The Boring東西與Python教程,並且我已經到了webscraping部分。下面是我用什麼樣的程序是應該做一個描述代碼:基本的Python掃描(美麗的湯&請求)
#! python3
# lucky.py - A small program that allows you to get search keywords from
# command line arguments, retrieve the search results page, and open
# a new browser tab for each result
# Steps:
# 1. Read the command line arguments from sys.argv
# 2. Fetch the search result page with the requests module
# 3. Find the links to each search result
# 4. Call the webbrowser.open() function to open the web browser
import sys, requests, bs4, webbrowser
# 1. Read the command line arguments from sys.argv
print('Googling...')
if len(sys.argv) > 1:
search = ' '.join(sys.argv[1:])
url = "https://www.google.com/#q="
for i in range(len(search.split())):
url += search.split()[i] + "+"
# 2. Fetch the search result page with the requests module
page = requests.get(url)
# 3. Find the links to each search result
soup = bs4.BeautifulSoup(page.text, 'lxml')
linkElems = soup.select('.r a')
# 4. Call the webbrowser.open() function to open the web browser
numOpen = min(5, len(linkElems))
for i in range(numOpen):
webbrowser.open("http://google.com" + linkElems[i].get('href'))
所以這裏的問題是,當我檢查linkElems的長度,它是0,這意味着soup.select(」 R A。 ')命令未能聚合在元素< a>內部定義的內容class = r(僅在Google中使用開發人員工具時可以看到的搜索結果的類)。因此,我的瀏覽器中沒有搜索結果的網頁。
我認爲這個問題與HTML解析器無法正常工作有關,或者Google改變了他們的HTML代碼的工作方式(?)。任何有關這個問題的見解將不勝感激!
所以你正在尋找一個錨元素?谷歌很可能已經改變了他們提供的內容,所以你可能不會再找到你要找的東西,至少是這樣。您需要查看它們的源代碼並查看包含所需信息的標籤,然後解壓。 –
@cᴏʟᴅsᴘᴇᴇᴅ確實如此。有趣的是,通過檢查源代碼,看起來Google仍然使用class = r作爲搜索結果,並在各個鏈接的錨點元素下使用。我會更深入地觀察源代碼,看看是否還有另一個主要的潛在問題。感謝您的評論! – Rohan
這很有可能是通過JS加載的......然後你可能需要看一下phantomjs或硒。祝你好運! –