Веб-скрепок с помощью python 3?

102
16

Я пытаюсь изучить python 3.x, чтобы я мог очищать веб-сайты. Люди рекомендовали использовать Beautiful Soup 4 или lxml.html. Может ли кто-нибудь указать мне в правильном направлении учебник или примеры для BeautifulSoup с python 3.x?


Благодарим вас за помощь.

спросил(а) 2021-01-19T12:34:46+03:00 6 месяцев, 1 неделя назад
1
Решение
171

Я на самом деле только что написал полное руководство по веб-очистке, которое включает пример кода в Python. Я написал и протестировал на Python 2.7, но оба пакета, которые я использовал (запросы и BeautifulSoup), полностью совместимы с Python 3 в соответствии с Стеной Позора.


Вот какой код, чтобы вы начали с веб-соскабливания в Python:

import sys
import requests
from BeautifulSoup import BeautifulSoup

def scrape_google(keyword):

# dynamically build the URL that we'll be making a request to
url = "http://www.google.com/search?q={term}".format(
term=keyword.strip().replace(" ", "+"),
)

# spoof some headers so the request appears to be coming from a browser, not a bot
headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5)",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"accept-charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3",
"accept-encoding": "gzip,deflate,sdch",
"accept-language": "en-US,en;q=0.8",
}

# make the request to the search url, passing in the the spoofed headers.
r = requests.get(url, headers=headers) # assign the response to a variable r

# check the status code of the response to make sure the request went well
if r.status_code != 200:
print("request denied")
return
else:
print("scraping " + url)

# convert the plaintext HTML markup into a DOM-like structure that we can search
soup = BeautifulSoup(r.text)

# each result is an <li> element with class="g" this is our wrapper
results = soup.findAll("li", "g")

# iterate over each of the result wrapper elements
for result in results:

# the main link is an <h3> element with class="r"
result_anchor = result.find("h3", "r").find("a")

# print out each link in the results
print(result_anchor.contents)

if __name__ == "__main__":

# you can pass in a keyword to search for when you run the script
# be default, we'll search for the "web scraping" keyword
try:
keyword = sys.argv[1]
except IndexError:
keyword = "web scraping"

scrape_google(keyword)


Если вы просто хотите узнать больше о Python 3 вообще и уже знакомы с Python 2.x, то эта статья о переходе с Python 2 на Python 3 может быть полезно.

ответил(а) 2021-01-19T12:34:46+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема