Это второй день моего участия в ноябрьском испытании обновлений, подробности о мероприятии:Вызов последнего обновления 2021 г.
Библиотека Python urllib используется для управления URL-адресами веб-страниц и сканирования содержимого веб-страниц.
заголовок запроса
headers = {
'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
'Referer': 'https://*******'
}
Заголовок запроса может быть замаскирован под реальную машину, делая вид, что она работает и просматривает, и его нелегко обнаружить. User-Agent, Referer и Cookie можно проверить, щелкнув правой кнопкой мыши веб-страницу и найти в запросе NetWork.
Это антикраулинговый метод.Конечно, вы также можете собрать кучу User-Agent или сгенерировать User-Agent случайным образом и т. д. Вы также можете заснуть после сканирования нескольких страниц.Я обычно сплю в течение 2 секунд.
Ползание
Подробно путь писать не буду,можно подставить свой.Сейчас мне нужно просканировать данные фильма для простого анализа,и я выбрал 3 категории
DICT = {"喜剧": "https://s/1---喜剧--------.html",
"爱情": "https://s/1---爱情--------.html",
"动作": "https://s/1---动作--------.html"}
Сохраните просканированные данные в data.csv, который имеет шесть полей: название фильма, рейтинг фильма, категория фильма, режиссер фильма, регион и год.
f = open("data.csv", "w", encoding='utf-8', newline='')
writer = csv.writer(f)
writer.writerow(['movie_title', 'movie_score', 'movie_type', 'movie_director', 'movie_region', 'movie_year'])
Закройте его, когда закончитеf.close()
Сначала вставьте полный код:
for kind in DICT:
url = DICT[kind]
url = quote(url, safe=string.printable)
request = Request(url, headers=headers)
res = urlopen(request)
with open("./tempFile/" + kind + ".html", 'wb') as f:
f.write(res.read())
with open("./tempFile/" + kind + ".html", 'r', encoding='utf-8') as f:
data = f.read()
soup = BeautifulSoup(data, "html.parser")
node_list = soup.find("ul", class_="myui-vodlist").findAll("li")
for li in node_list:
movie_detailUrl = "https://s/" + li.find("h4", class_="title").find("a")['href']
movie_title = li.find("h4", class_="title").find("a").get_text()
movie_score = li.find("span", class_="pic-tag").get_text()
movie_director, movie_region, movie_year = get_movieInfo(movie_detailUrl)
writer.writerow([movie_title, movie_score, kind, movie_director, movie_region, movie_year])
print(movie_title, movie_detailUrl, kind, movie_director, movie_region, movie_year)
# time.sleep(2)
f.close()
url = quote(url, safe=string.printable)
Это означает, что если в пути решения есть китайский язык, он поможет вам его преобразовать;"./tempFile/" + kind + ".html"
Безопаснее будет хранить его по этому пути и потом читать, но это, конечно, не обязательно;
soup = BeautifulSoup(data, "html.parser")
Использование BeautifulSoup будет более удобным и понятным, у меня немного кружится голова от метода поиска пути, такого как scrapy.soup.find("ul", class_="myui-vodlist").findAll("li")
Например, чтобы найти все элементы li в ul с помощью класса myui-vodlistfind("a").get_text()
Это чтобы вынуть текст в
распаковать читать
В функции get_movieInfo получить нужный нам контент на другой странице, на этой странице тоже так же получить, но мою страницу нужно распаковать, чтобы прочитать.Для новичков тоже первый раз столкнулся ? Итак, теперь у нас есть еще один шаг, после получения запроса используйте поток ввода-вывода для чтения, а затем распаковывайте
res = urlopen(request)
htmls = res.read()
buff = BytesIO(htmls)
ff = gzip.GzipFile(fileobj=buff)
htmls = ff.read()
Попади в точку! Мы собираемся добавить это в заголовок запроса"Accept-Encoding": "gzip"
, серый очень важен, насколько он важен, то есть если его не напишешь, то получишь ошибку?
Эта остановка данных вызывает у меня головную боль
Первоначально я взял последние два A A.GET_TEXT (), но если бы год неизвестен, последний а может быть регион Решение состоит в том, чтобы взять все слова в нем (содержание без элементов) для сегментации, я слишком глупо ?
aaa = soup.find("p", class_="data").text
list = str(aaa).replace('\xa0', ' ').split(" ")
index = -1
li = []
for i in list:
if i != '':
li.append(i)
movie_year = li[index].split(':')[1]
Просто сохраните полученные данные в csv ?
writer.writerow([movie_title, movie_score, kind, movie_director, movie_region, movie_year])